IE6 не изменяет атрибуты (идентификатор и имя) с помощью атрибута jQuery - какие -либо предложения?

StackOverflow https://stackoverflow.com/questions/2202389

Вопрос

Предложения другие, что сброс IE6, это ... я не могу это контролировать :)

Быстрый краткий обзор того, что я пытаюсь сделать: у меня есть форма с избранными элементами. Когда пользователь выбирает конкретную опцию в SELECT (ID TYPE2 в коде ниже), я отображаю структуру DIV, которая содержит новый SELECT. Я хочу, чтобы новая структура Div и ее дети были клоном существующего (id pdprogramdiv1), потому что я использую PHP для заполнения выбора в Div. После того, как выбор клонирован, мне нужно изменить идентификатор клона и имя DIV и его детского ярлыка и выберите, поскольку информация о форме передается в мой сценарий отправки PHP. Если у них нет уникальных идентификаторов, то хотя они сериализованы в строку запроса, массив $ _post в PHP включает только последнее значение данного идентификатора.

Я включил код, который отлично работает в Firefox вздох, и не может изменить идентификаторы и имена в IE6. Этот код может быть не таким кратким, как некоторые; Я все еще довольно новичок в jQuery.

$('#type2').change(function() {
    if ($('#type2 option:selected').text() == 'Program Director') {
        $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));

        $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});

        $('#pdProgramDiv2 > label').attr('for', 'pdProgram2');
    } else {
        $('#pdProgramDiv2').hide();
    }
}); 

Я оглянулся вокруг и пытался использовать переменные, а не цепочку, и отдельные вызовы для ATTR, а не использование буквального объекта (или карты), но ничего не помогает. Все вариации работают нормально в FF, но без радости в IE6.

Это известная проблема, или кто -нибудь может сказать мне способ внести изменения?

Если я не могу заставить это работать, я думаю, мне придется создать все элементы и скрыть их, но это не так хорошо.

Заранее спасибо, как всегда!

Обновление: решено

Большое спасибо людям, которые нашли ошибку моих путей. Я хотел опубликовать код, который в конечном итоге решает проблему. Как я сказал в своем комментарии на принятый ответ ниже, исправление имеет смысл. Немного смущен, я этого не видел, но иногда нужна свежая пара глаз! Единственное изменение заключается в выборе ребенка выбора, а не идентификатором SELECT, и удалением имени ATTR назначения на DIV, потому что, как уже упоминалось, он ничего не делает.

$('#type2').change(function() {
    if ($('#type2 option:selected').text() == 'Program Director') {
        $('#pdProgramDiv1').clone()
            .attr('id', 'pdProgramDiv2')
            .appendTo($('#type2Div'));

        $('#pdProgramDiv2 > select').attr({
             id: 'pdProgram2', 
             name: 'pdProgram2'});

        $('#pdProgramDiv2 > label').attr('for', 'pdProgram2');
    } else {
        $('#pdProgramDiv2').hide();
    }
}); 
Это было полезно?

Решение

Я думаю, что ты проблема здесь ...

$('#type2').change(function() {
    /* snip */
        $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));

        $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});
    /* snip */
});

Вы клонируете контейнер, переключаете свой идентификатор и вставляете его обратно на страницу. Контейнеры в порядке, но страница теперь сочетает в себе два элемента ID'D #pdprogram1. Document.GetElementByID не понравится.

Refactor Код для поиска элемента SELECT по его тегу, а не по его идентификатору.

Другие советы

Я считаю, что вы только что разбились в проблеме с IE6, потому что он плохо обрабатывает клонирование узла, если вообще. Это точно не удается исправить имя и идентификатор клон -элементов ...

Больше информации здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top