IE6 не меняет атрибуты (идентификатор и имя) с помощью вызова jQuery attr - есть предложения? - PullRequest
0 голосов
/ 04 февраля 2010

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

Краткий обзор того, что я пытаюсь сделать: у меня есть форма с выбранными элементами. Когда пользователь выбирает конкретную опцию в select (id type2 в приведенном ниже коде), я отображаю структуру div, которая содержит новый выбор. Я хочу, чтобы новая структура div и ее дочерние элементы были клоном существующей (id pdProgramDiv1), потому что я использую php для заполнения выбора в div. После того, как select клонирован, мне нужно изменить идентификатор клона и имя div и его дочернюю метку и выбрать, потому что информация о форме передается в мой скрипт php submit. Если у них нет уникальных идентификаторов, то, хотя они и сериализуются в строку запроса, массив $ _POST в php включает только последнее значение данного идентификатора.

Я включил код, который абсолютно идеально работает в Firefox sigh и не может изменить идентификаторы и имена в 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, а не идентификатора 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();
    }
}); 

Ответы [ 2 ]

4 голосов
/ 04 февраля 2010

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

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

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

Вы клонируете контейнер, переключаете его идентификатор и вставляете его обратно на страницу. Контейнеры в порядке, но страница теперь содержит два элемента с идентификатором # pdProgram1. document.getElementById это не понравится.

Измените код для поиска элемента select по его тегу, а не по его идентификатору.

0 голосов
/ 04 февраля 2010

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

Подробнее здесь .

...