2012-11-08 88 views
1

我有一段代碼來選擇/取消選擇所有Dojo複選框使用單個主複選框(它充當切換),在Firefox上正常工作,但不在IE8上。我盡力找到問題,但無能爲力,任何人都可以幫忙。我附上以下代碼:Dojo函數無法在IE8上工作

<script type="text/javascript"> 
    dojo.require("dojo.parser"); 

    dojo.ready(function() { 
     var checkboxes = []; 
     dojo.query('#waferCheck_cb input[type=checkbox]').forEach(function(node, index, arr){ 
     checkboxes.push(arr[index].id); 
     var handle = dojo.connect(dijit.byId(arr[index].id), "onchange", function(evt){ 

      var cbClicked = evt.target.id; 
      var cbStatus = dijit.byId(cbClicked).get("checked"); 
      setCBSelection(checkboxes,cbClicked,cbStatus); 
      dojo.disconnect(handle);   
      }); 
     }); 
    }); 

    function setCBSelection(checkboxes,cb_Clicked, cb_Status) { 
     var len = checkboxes.length; 
     if(len > 0) { 
      // get index of the checkbox clicked 
      var cb_pos = 0; 
      for(var i = 0; i < len; i++) { 
       if(cb_Clicked == checkboxes[i]) { 
        cb_pos = i; 
        break; 
       } 
      } 

      // If Select All checkbox clicked, set the other checboxes accordingly 
      if(cb_pos == 0) { 
       for(var i = 1; i < len; i++) { 
        dijit.byId(checkboxes[i]).set("checked", cb_Status); 
       } 
      } else { 
       // If any other checkbox is clicked, set the Select All accordingly 
       var allCBSameStatus = true; 
       for(var i = 1; i < len; i++) { 
        var curCBStatus = dijit.byId(checkboxes[i]).get("checked"); 
        if(curCBStatus != cb_Status) { 
         allCBSameStatus = false; 
         break; 
        }; 
       } 
       if(allCBSameStatus){ 
        dijit.byId(checkboxes[0]).set("checked", cb_Status) 
       }else{ 
        if(cb_Status == false) { 
         dijit.byId(checkboxes[0]).set("checked", cb_Status) 
        } 
       } 
      } 
     } 
    } 
</script> 

回答

0

我相信IE8不喜歡缺少分號。我看到兩行缺少分號的行。

dijit.byId(checkboxes[0]).set("checked", cb_Status) 
+0

不,這不是問題,只是檢查它 –

0

你有沒有試圖定義function setCBSelection(...)dojo.ready(..)前(見下文)?也許這有助於它在被定義之前使用?如果沒有幫助,如果您發佈某種錯誤消息的IE可能拋出可能是有用......

dojo.require("dojo.parser"); 

    function setCBSelection(checkboxes,cb_Clicked, cb_Status) { 
     var len = checkboxes.length; 
     if(len > 0) { 
      // get index of the checkbox clicked 
      var cb_pos = 0; 
      for(var i = 0; i < len; i++) { 
       if(cb_Clicked == checkboxes[i]) { 
        cb_pos = i; 
        break; 
       } 
      } 

      // If Select All checkbox clicked, set the other checboxes accordingly 
      if(cb_pos === 0) { 
       for(i = 1; i < len; i++) { 
        dijit.byId(checkboxes[i]).set("checked", cb_Status); 
       } 
      } else { 
       // If any other checkbox is clicked, set the Select All accordingly 
       var allCBSameStatus = true; 
       for(i = 1; i < len; i++) { 
        var curCBStatus = dijit.byId(checkboxes[i]).get("checked"); 
        if(curCBStatus != cb_Status) { 
         allCBSameStatus = false; 
         break; 
        } 
       } 
       if(allCBSameStatus){ 
        dijit.byId(checkboxes[0]).set("checked", cb_Status); 
       }else{ 
        if(cb_Status === false) { 
         dijit.byId(checkboxes[0]).set("checked", cb_Status); 
        } 
       } 
      } 
     } 
    } 


    dojo.ready(function() { 
     var checkboxes = []; 
     dojo.query('#waferCheck_cb input[type=checkbox]').forEach(function(node, index, arr){ 
     checkboxes.push(arr[index].id); 
     var handle = dojo.connect(dijit.byId(arr[index].id), "onchange", function(evt){ 

      var cbClicked = evt.target.id; 
      var cbStatus = dijit.byId(cbClicked).get("checked"); 
      setCBSelection(checkboxes,cbClicked,cbStatus); 
      dojo.disconnect(handle);   
      }); 
     }); 
    }); 

順便說一句:你應該總是使用===0false比較......你可以使用jsFiddle讓JSLint檢查你的代碼,該代碼解決了許多首先看不到的問題。希望我能幫助你。