2013-04-11 73 views
-1

我確實有以下腳本。它只在Chrome中運行。我無法檢查或激活複選框。我怎樣才能讓它在FF和IE中運行?Javascript FF和IE

<script type="text/javascript"> 
    function checkHoverButton() { 
     var lis = document.getElementsByTagName('li'); 
     for(var i = 0, l = lis.length; i < l; i++) { 
      lis[i].onclick = function() { 

       var c = this.getElementsByTagName('input')[0]; 

       if (c.checked){ 
        c.checked = 0; 
        this.style.background = 'white';  
       } 
       else{ 
        c.checked = 1; 
        this.style.background = '#eceff5'; 
       } 
      }; 
     } 
    } 
</script> 

<li class="friends-li"> 
    <span class="green"> 
    <input type="checkbox" value="<?php echo $value; ?>" id="form_friend_<?php echo $value; ?>" name="form[friend][]" /> 
    </span> 
    <span class="pink"> 
    <img id="img_friend_<?php echo $value; ?>" src=""> 
    </span> 
    <span class="blue"> 
    <label for="form_friend_<?php echo $value;?>" ><?php echo $label;?></label> 
    </span> 
</li> 
+3

你試過c.checked'設置'來TRUE'和'FALSE'的'他們正確的價值觀? – 2013-04-11 19:07:11

+0

請告訴我們在IE中發生了什麼問題... – kay 2013-04-11 19:07:17

+0

期望的行爲是什麼?什麼不在IE/Firefox中工作? – 2013-04-11 19:07:43

回答

3

首先,我假定您在代碼的某處調用了checkHoverButton

問題是事件冒泡。

當您點擊複選框或標籤時,您基本上會取消該操作。你需要確保你沒有點擊這些元素。

lis[i].onclick = function(e) { 

    var clickedOn = (e.srcElement || e.target).nodeName; 
    if(clickedOn==="INPUT"||clickedOn==="LABEL") return;  
    var c = this.getElementsByTagName('input')[0]; 

- 編輯 -

lis[i].onclick = function(e) { 

    var clickedOn = (e.srcElement || e.target).nodeName; 
    var setState = clickedOn!=="INPUT" && clickedOn!=="LABEL";  
    var c = this.getElementsByTagName('input')[0]; 
    if (setState) { 
     c.checked = !c.checked; 
    } 
    this.style.background = c.checked ? "#eceff5" : "#fff"; 
}; 
+0

如果點擊複選框或標籤,背景顏色不會改變(因爲'if'沒有得到執行) - http://jsfiddle.net/t7RmF/3/。如果你在「li」之外點擊,那麼它就可以工作。我認爲它需要更多的邏輯。我覺得啞巴,但我不明白哈哈 – Ian 2013-04-11 19:48:27

+0

不要設置複選框的選中狀態。上面的基本想法,我想我得到了正確的順序的顏色。 – epascarello 2013-04-11 19:50:18

+0

供參考:我編輯了代碼以向您展示基本想法。 – epascarello 2013-04-11 19:57:53

1

@epascarello的做法是非常好的。

我做了一個例子,也許它有幫助。

JSFiddle

var lis = document.getElementsByTagName('li'), 
     checkHandler = function(event){ 
      event.stopPropagation(); 
     }, 
     clickHandler = function (event) { 
      var c = this.getElementsByTagName('input')[0]; 
        c.onclick = checkHandler; 
      if (c.checked) { 
        c.checked = 0; 
        this.classList.remove('darker'); 
        this.classList.add('white'); 
      } else { 
        c.checked = 1; 
        this.classList.remove('white'); 
        this.classList.add('darker'); 
      } 
      return false; 
     }; 

for (var i = 0, l = lis.length; i < l; i++) { 
     lis[i].onclick = clickHandler; 
}