IE6에서는 jQuery attr 호출로 속성(id 및 이름)을 변경하지 않습니다. 어떤 제안이 있습니까?

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

문제

IE6을 버리는 다른 제안은 ...통제할 수가 없어요 :)

내가 하려는 일에 대한 간략한 개요:선택 요소가 포함된 양식이 있습니다.사용자가 선택 항목(아래 코드의 ID type2)에서 특정 옵션을 선택하면 새 선택 항목이 포함된 div 구조가 표시됩니다.나는 div에서 선택 항목을 채우기 위해 PHP를 사용하기 때문에 새 div 구조와 그 하위 구조가 기존 구조(id pdProgramDiv1)의 복제본이 되기를 원합니다.선택 항목이 복제되면 양식 정보가 제출 PHP 스크립트에 전달되기 때문에 복제본의 ID와 div 이름 및 해당 하위 레이블을 변경하고 선택해야 합니다.고유한 ID가 없으면 쿼리 문자열로 직렬화되지만 PHP의 $_POST 배열에는 지정된 ID의 마지막 값만 포함됩니다.

Firefox에서 완벽하게 작동하는 코드를 포함시켰습니다. 한숨을 쉬다, IE6에서 ID와 이름을 변경하지 못합니다.이 코드는 일부 코드만큼 간결하지 않을 수 있습니다.저는 아직 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에서는 즐겁지 않습니다.

이것은 알려진 문제입니까, 아니면 변경 사항을 적용하는 방법을 알려주실 수 있는 사람이 있습니까?

이것이 작동하지 않으면 모든 요소를 ​​생성하고 숨겨야 할 것 같지만 그다지 좋지 않은 것 같습니다.

언제나처럼 미리 감사드립니다!

업데이트:해결됨

내 방식의 오류를 찾아주신 분들께 정말 감사드립니다.문제를 해결하는 코드를 게시하고 싶었습니다.아래 허용된 답변에 대한 내 의견에서 말했듯이 수정 사항은 완벽하게 이해됩니다.조금 당황해서 못봤지만 가끔은 신선한 눈빛이 필요해요!유일한 변경 사항은 선택 ID 대신 하위 선택을 선택하고 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를 전환하고, 페이지에 다시 삽입합니다.컨테이너는 괜찮지만 이제 페이지에는 ID가 #pdProgram1인 두 요소가 포함되어 있습니다.document.getElementById는 이를 좋아하지 않을 것입니다.

ID 대신 태그로 선택 요소를 검색하도록 코드를 리팩터링합니다.

다른 팁

IE6이 노드 복제를 제대로 처리하지 못하기 때문에 문제가 발생한 것 같습니다.복제된 요소의 이름과 ID를 수정하는 데 정확하게 실패합니다...

더 많은 정보 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top