2012-03-16 2 views
0

'모두 선택'이라고 표시된 체크 상자에서 onclick 이벤트로 모든 체크 박스를 검사하려고합니다. 코드가 FF, Chrome에서는 정상적으로 작동하지만 IE에서는 작동하지 않습니다. 코드는 다음과 같습니다 :IE에서 javascript가 작동하지 않는 경우 모든 체크 박스를 선택하십시오

<script type="text/javascript"> 
function toggle(source) { 
checkboxes = document.getElementsByName('category'); 
for(var i in checkboxes) 
checkboxes[i].checked = source.checked; 
} 
</script> 

<input type="checkbox" name="selectAll" id="selectAll" onClick="javascript :toggle(this)" />Select All Categories 

<input type="checkbox" name="category" id="category1" />category1 
<input type="checkbox" name="category" id="category2" />category2 
<input type="checkbox" name="category" id="category3" />category3 

어떤 도움을 주시면 감사하겠습니다.

+0

@ Matrix-'getElementsByName'은 IE에서 작동합니다. [DOM 2 HTML 사양] (http://www.w3.org/TR/DOM-Level-2-HTML/html.html# ID-71555259)), IE는 ID와 NAME 속성을 동일한 것으로 취급합니다. – RobG

답변

2

jsFiddle에 저장된이 정리 된 버전은 IE : http://jsfiddle.net/jfriend00/m7T2S/에서 잘 작동합니다.

function toggle(source) { 
    var checkboxes = document.getElementsByName('category'); 
    for (var i = 0; i < checkboxes.length; i++) 
     checkboxes[i].checked = source.checked; 
}​ 

그래서 실제 페이지에 표시되어 있지 않은 내용이 있어야합니다. 난 당신의 코드를했다

정리는 다음과 같습니다가 실수로 전역 변수하지 그래서

  1. 로컬 변수로 체크 박스를 선언합니다.
  2. for (var i = 0; i < array.length; i++) 루프로 확인란 배열을 반복합니다. 배열은 (for i in array)으로 반복해서는 안됩니다. 배열 요소가 아니라 개체의 속성을 반복하기 때문입니다.
  3. HTML의 이벤트 처리기에 접두사 javascript:이 필요하지 않습니다.
+0

+1. 나는 OP가 체크 박스를 폼에 넣어야한다고 말하면, 그것들은'document.formName.category'로 참조 될 수있다. 속성 액세스는 메소드보다 빠르다. (속도는 중요하지 않지만, 더 논리적이다. 암호). – RobG

1

그 형태는 대신 getElementsByName의 다음과 같이 할 수있는 경우 :


function toggle(source) { 
    var field = document.formname.category; 
    for (i = 0; i < field.length; i++) { 
     field[i].checked = source.checked; 
    } 
} 
+0

나는 그것이 당신이 "폼이라면"을 의미한다고 생각합니다. – RobG

+0

예 ... 오타가 수정되었습니다 ... 감사합니다. –

1

그것은 IE8 작동

function toggle(source) 
{ 
    checkboxes = document.getElementsByName('category'); 
    for(i=0;i<checkboxes.length;i++) 
    checkboxes[i].checked = source.checked; 
} 

하나 아래 내가 테스트 한과 함수를 교체합니다.

관련 문제