Проблема с сгенерированным Javascript HTML-кодом в Internet Explorer - PullRequest
3 голосов
/ 22 ноября 2011

У меня есть HTML-страница с формой в нем. В этой форме у меня есть 1 поле ввода, доступное для пользователей, с типом, установленным на file. Форма обычно скрыта.

Форма появляется, когда пользователь нажимает кнопку, которая вызывает функцию jQuery.dialog(). Диалог get создан просто отлично, но поле ввода никогда не отображается. Я не могу точно знать, отображается ли он вообще или просто выводится из экрана.

То же самое происходит с таблицей, которая автоматически генерируется JavaScript. Таблица состоит из нескольких элементов ввода (хотя и разных типов) и 1 элемента выбора в строке. Теперь элемент select отображается правильно, все элементы ввода не отображаются.

Это проблема с Internet Explorer? Потому что все другие (основные) браузеры отображают его просто отлично. Под основными браузерами я имею в виду Chrome, FF, Safari & Opera.


Редактировать> Источник

Форма на странице:

<form title="Upload snapshot" class="hidden" enctype="multipart/form-data" id="fileUpload" name="fileUpload">
    <input type="hidden" name="command" value="load" />
    <input type="hidden" name="table" id="formTable" />
    <input type="file" id="uploadedFile" name="uploadedFile" />
</form>

Функция, которая превращает форму в диалог:

function LoadDatabase(){
    var form = document.getElementById('fileUpload');
    var table = document.getElementById('formTable');
    $(table).attr('value', Settings['table']);
    $(form).dialog({
        position    : 'center',
        autoOpen    : true,
        width       : 500,
        modal       : true,
        draggable   : true,
        buttons     : {
        "Ok"    : function(){
            // Code to hande the file upload...
            $(form).dialog('close');
        },
        "Cancel" : function(){
            $(form).dialog('close');
        }
        },
        close       : function(){
        }
    });
}

Из-за сложности таблицы для ее создания требуется совсем немного кода. По сути, js get - это отформатированная в json коллекция записей. Эта коллекция получает декодирование, и для каждого типа столбца создается соответствующая ячейка и добавляется в документ страницы. Основной бит всего этого:

var tbodyNew =  document.createElement('tbody');
$(data.Data).each(function(value) {
    row=this;
    var trRowNew =  document.createElement('tr');
    $(trRowNew).attr('id', row['id']);
    var tdNew = document.createElement('td');
    var rowSelect = document.createElement('input');
    $(rowSelect).attr('type', 'checkbox');
    $(rowSelect).addClass('row-selector');
    $(rowSelect).addClass('hidden');
    $(tdNew).append(rowSelect);
    $(trRowNew).append(tdNew);
    for (var columnId in Columns) {
        tdNew = document.createElement('td');
        if (Columns[columnId].Name == 'id') {
            $(tdNew).addClass('hidden');
        }
        $(tdNew).attr('id', Columns[columnId].Name);
        $(tdNew).append(AddCell(columnId, row));
        $(trRowNew).append(tdNew);
    }
    $(tbodyNew).append(trRowNew);
});
$(tableNew).append(tbodyNew);
$(form).html('');
$(form).append(tableNew);

Метод AddCell() определяет тип ввода, который следует использовать (флажок, текст и т. Д.).


Редактировать 2> Дополнительные изображения

Для дальнейшего объяснения происходящего:

Изображения показывают разницу в отображении таблицы на заднем плане и способ отображения диалога на переднем плане.

enter image description here

enter image description here


Редактировать 3> Проверка DOM

Я проверил структуру DOM в Internet Explorer и увидел, что элементы помещаются на страницу ... Они просто не отображаются. Кажется, что они не получают соответствующую высоту и ширину. Несмотря на проверку их стиля, он показывает, что для этих атрибутов установлено значение 'auto':

enter image description here

1 Ответ

0 голосов
/ 23 ноября 2011

В поисках решения этой проблемы я обнаружил, что если для свойства ввода отображено свойство table-row, Internet Explorer его подавит. Удаление указанного свойства решит проблему. Тем не менее, кажется, что в соответствии с документацией, это действительно желаемая функциональность. Хотя странно, что это другие браузеры, которые не следовали документации ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...