2013-08-20 78 views
1

我在網上發現了這段代碼,它在Firefox和Chrome上沒問題,但它在IE上無法工作,有誰知道如何修復IE?javascript工具「全選」複選框不工作在IE中

按鈕的值不翻轉,只是複選框無法更改

<html> 

<head> 
<script type="text/javascript"> 

    function do_this(){ 

     var checkboxes = document.getElementsByName('approve[]'); 
     var button = document.getElementById('toggle'); 

     if(button.value == 'select'){ 
      for (var i in checkboxes){ 
       checkboxes[i].checked = 'FALSE'; 
      } 
      button.value = 'deselect' 
     }else{ 
      for (var i in checkboxes){ 
       checkboxes[i].checked = ''; 
      } 
      button.value = 'select'; 
     } 
    } 
</script> 
</head> 

<body> 
<input type="checkbox" name="approve[]" value="1" /> 
<input type="checkbox" name="approve[]" value="2" /> 
<input type="checkbox" name="approve[]" value="3" /> 

<input type="button" id="toggle" value="select" onClick="do_this()" /> 
</body> 

</html> 
+0

當你設置'checked'是''FALSE''一'字符串'或'假'一個'boolean'? – Paul

回答

1

將您的處理程序放在代碼中而不是聯機被認爲是最佳實踐。你可以節省一些代碼,並把onclick處理程序在你的代碼如下所示:

// add event handler 
function init() { 
    document.getElementById('toggle').onclick = function() { 
     do_this(this); 
    }; 
} 
window.onload = init; 

// me is the button here 
function do_this(me) { 
    var checkboxes = document.getElementsByName('approve[]'); 
    for (var i = 0; i < checkboxes.length; i++) { 
     // toggle to what it is not 
     checkboxes[i].checked = !checkboxes[i].checked; 
    } 
    me.value = me.value == 'select' ? 'deselect' : 'select'; 
} 

樣品撥弄來顯示它在行動:http://jsfiddle.net/qK2qS/

+0

只是爲了充分披露,請查看:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener獲取有關事件處理程序附件(以及較老的IE)的mondern瀏覽器中的信息 - 特殊請注意,在我的示例中,「我」不會在IE中使用來自內聯事件處理程序的「this」(按鈕)。 –

+0

這個工程。非常感謝 – Pat

0

你必須一個布爾值傳遞給checked財產。其他瀏覽器都瞭解你的離奇邏輯和轉換'FALSE'布爾true(檢查框),並''false(取消選中它)

使用實際truefalse布爾值,它可能只是工作;)