2012-03-16 12 views
0

「すべて選択」というラベルのチェックボックスでonclickイベントですべてのチェックボックスをチェックしようとしています。 コードはFF、Chromeでは正常に動作していますが、IEでは動作しません。 コードは以下の通りである:すべてのチェックボックスをオンにすると、JavaScriptがIEで動作しない

<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/で正常に動作しています。

実際のページには、あなたが私たちに表示されていないものがなければなりません。私はあなたのコードでやった

クリーンアップは以下のとおりです。それは偶然グローバル変数ではありませんので、

  1. は、ローカル変数としてチェックボックスを宣言します。
  2. for (var i = 0; i < array.length; i++)ループのチェックボックス配列を繰り返します。配列は(for i in array)で反復されるべきではありません。これは配列要素だけでなくオブジェクトのプロパティを反復するためです。
  3. HTML内のイベントハンドラに接頭語「javascript:」は必要ありません。その後、あなたはgetElementsByNameの代わりに次のように行うことができ
+0

+1。私はOPがチェックボックスをフォームに入れなければならないと付け加えると、プロパティアクセスはメソッドより高速でなければなりません(速度は重要ではありませんが、より論理的です。コード)。 – RobG

1

その形式の場合:


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のために働くと1

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

の下にあなたの機能を交換し、私がテストしています。

関連する問題