2009-08-26 2 views
0

다음 코드가 있습니다. 사용자가로드 된 기본 옵션 만 사용하여 드롭 다운을 클릭하면 드롭 다운을로드하는 데 사용됩니다.이 드롭 다운이 상당히 크기 때문에 IE가 ' 그 정도는 좋아. 여기에 코드입니다 :IE 6 Javascript 대체 드롭 다운 문제 선택

function populateDropDown(id, code) { 
    var currentSelect = document.getElementById(id); 
    <%--Don't enable the dropdown if it has more than one entry already - assume this to be populated.--%> 
    if(currentSelect.length == 1) { 
      currentSelect.remove(0); 
      var selectedIndex = 0; 
      for(var index = 0; index < codes.length; index++) { 
        var newOption = document.createElement('option'); 
        newOption.value = codes[index]; 
        newOption.text = values[index]; 
        try { 
          currentSelect.add(newOption, null); // standards compliant 
        } 
        catch(ex) 
        { 
          currentSelect.add(newOption); // IE only 
        } 
        if(codes[index] == code) { 
          selectedIndex = index; 
        } 
      } 
      currentSelect.selectedIndex = selectedIndex; 
    } 
} 

이 코드는, 오페라 9.x의에서 IE 7 일 -하지만하지 IE 6 (내가 좋아하는 오페라 잠자리 때문에 오페라에서 테스트 -하지만 정말에만 IE 7에서 작동해야하고 6).

IE 6에서는 코드가 드롭 다운을 채우지 만 선택된 값을 선택한 값이 아닌 드롭 다운 목록의 첫 번째 값으로 설정합니다. 선택한 값은 언급 된 다른 두 브라우저에서 적절한 값으로 설정됩니다.

나는 어떤 의미로든 자바 스크립트 전문가는 아니기 때문에 누군가가 IE 6이이 작업을 수행하는 이유와이를 해결하는 방법을 알고 있다면 그 점을 이해할 수 있습니다. 주석에는 JSP 주석이 있습니다. 자바 스크립트가 브라우저에 전송되기 전에 주석이 제거됩니다 (잘못된 주석이 아닙니다).

+0

코드는 어디서 오는가? (코드 [인덱스] == 코드)? –

+0

죄송합니다, Russ 님, 서명을 추가하는 것을 잊었습니다. 서명은 functionName (id, code)입니다. 이 코드는 JSP EL 함수를 통해 초기에 선택된 값에서옵니다 (따라서이 검사는 이미 채워진 드롭 다운을 채우지 않는 이유입니다 - 드롭 다운에 두 개 이상의 옵션이 없으면 걱정할 큰 * 문제가 있습니다) !) – MetroidFan2002

+0

서명을 추가하기 위해 편집 됨. – MetroidFan2002

답변

1

전에이 정확한 문제를 겪었습니다. 포커스가 문서에 다시 제공되기 전에 select 요소 (options)의 동적으로 생성 된 자식 요소에 액세스하려고하면 selectedIndex 설정이 실패하고 첫 번째 항목이 기본값으로 설정됩니다.

내가 수정을 발견 한 문서를 찾을 수있을 때 게시 할 예정입니다. 계속 지켜봐주십시오!

업데이트 :

그것을 발견! 대신 <select> 요소에 selectedIndex을 설정

원하는 <option> 요소를 찾아 설정된 속성을 true로 '선택':

var currentSelect = document.getElementById(id); 
if(currentSelect.length == 1) { 
     currentSelect.remove(0); 
     var selectedIndex = 0; 
     for(var index = 0; index < codes.length; index++) { 
       var newOption = document.createElement('option'); 
       newOption.value = codes[index]; 
       newOption.text = values[index]; 
       try { 
         currentSelect.add(newOption, null); // standards compliant 
       } 
       catch(ex) 
       { 
         currentSelect.add(newOption); // IE only 
       } 
       if(codes[index] == code) { 
         selectedIndex = index; 
       } 
     } 
     // currentSelect.selectedIndex = selectedIndex; 
     // Try this: 
     currentSelect.options[selectedIndex].setAttribute('selected', true); 
} 
+0

안녕 코리 - 그게 재미 있어요. 내가 내일 들어가 자마자 시도해 볼 것이고, 그것이 효과가 있다면 (나는 희망한다) 당신의 대답을 받아 들일 것입니다. 그때까지 upvote로 인해 지불해야합니다 :) – MetroidFan2002

+0

괜찮습니다. 나는 똑같은 문제에 직면했지만 jQuery를 사용했다. IE7, IE8 및 FF2 +에서 모두 예상대로 작동했지만 IE6에서는 실패했습니다. 다음은 수정 된 실제 기사입니다. http://brh.numbera.com/experiments/browserdemos/ie6-adding-options.html –

+0

답변을 수락하고 있지만 내 자신을 추가하고 있습니다 - 답변이 도움이되었습니다. 나를. – MetroidFan2002

0

코리의 의견이 저를 도와하지만, 자신의 코드를 생성하지 않았다 IE 6에서 기대했던 결과. 그러나 그는 초점이 문제가 될 수 있다고 지적했다. 다음 스 니펫은 IE 6에서 제대로 선택하게합니다. 드롭 다운을로드 한 다음 선택하기 때문에 정말 이상하게 보입니다. 그러나 기능은 원하는대로로드되고로드하는 정적 HTML보다 빠릅니다.

currentSelect.focus(); 
currentSelect.selectedIndex = selectedIndex; 

다음 선택한 인덱스를 설정, 입력에 초점을 맞춘, IE 6에서 작동 - 드롭 다운 정말 빠른 첫 번째 입력으로 이동 한 다음 다시 점프 있지만. 하지만, 그것이 작동하는 한 ...

+0

아마도 this를 시도해보십시오 : currentSelect 대신에.'selectedIndex'를 설정하기 전에 그것을 설정하기 위해 타임 아웃을 시도하십시오 :'setTimeout (function() {currentSelect.selectedIndex = selectedIndex;}, 0); –