IE6 не изменяет атрибуты (идентификатор и имя) с помощью атрибута jQuery - какие -либо предложения?
-
18-09-2019 - |
Вопрос
Предложения другие, что сброс 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, потому что он плохо обрабатывает клонирование узла, если вообще. Это точно не удается исправить имя и идентификатор клон -элементов ...
Больше информации здесь.