2012-12-14 37 views
1

我創建了一個函數,使我的複選框作爲單選按鈕,並且可以取消選擇它們。 我遇到的問題是,當第二次點擊相同的盒子時,它比較快(不是快速雙擊),它不會執行任何操作,例如它沒有捕獲到事件。複選框設置爲單選按鈕第二次單擊故障

他們乘以兩倍,它們共用名稱。

checkbox name 1 
checkbox2 name 1 

checkbox3 name 2 
checkbox4 name 2 .... 

這是我的功能,它運作良好,除了那個小故障。

$('#MyDiv').find('input[type="checkbox"]').click(function() { 
    if (!$(this).is(':checked')) { 
     $(this).prop('checked', false); 
     return; 
    } 
    $('#MyDiv').find('input[type="checkbox"][name=' + $(this).attr('name') + ']').each(function() { 
     $(this).prop('checked', false); 
    }); 
    $(this).prop('checked', true); 
}); 

HTML示例:

<div id="MyDiv"> 
    <div> 
     <p> 
      <input id="MyDivUsage_Yes" type="checkbox" name="MyDivUsage" /> 
      <label for="MyDivUsage_Yes">Yes</label> 
      <input id="MyDivUsage_No" type="checkbox" name="MyDivUsage" /> 
      <label for="MyDivUsage_No">No</label> 
     </p> 

    </div> 
</div>​ 

出於某種原因,它的jsfiddle不會工作。

+1

我認爲你已經確定你的問題......事件「摸索」。但我不知道這個方法,所以我也期待着回覆。 –

+0

您可以添加一些HTML或設置一個例子:http://jsfiddle.net – Niklas

+0

更新我的問題。 – rexdefuror

回答

1

試試這個:

var checked = {}; 
    $('.desectable-radio').each(function (index) { 
     checked[index] = this.checked; 
     $(this).click(function() { 
      if (checked[index]) 
       this.checked = false; 
      for (var i in checked) { 
       checked[i] = false; 
      } 
      checked[index] = this.checked; 
     }); 
    }); 

小提琴:http://jsfiddle.net/dFDeX/1/

+0

我會測試它。謝謝。 – rexdefuror

+0

這工作得很好!甚至沒有在IE瀏覽器中摸索。我只需要檢查更多的東西:) – rexdefuror

+0

這似乎是解決方案。雖然它實際上使用無線電,但功能是完美的。 – rexdefuror

1

我猜它至少可能變得更高效:

$('#MyDiv').find('input[type="checkbox"]').on('click', function() { 
    $('input[type="checkbox"][name="'+$(this).attr('name')+'"]').not(this).prop('checked', false); 
});​ 

FIDDLE

或者多一點的原生JS:

$('input[type="checkbox"]', '#MyDiv').on('click', function() { 
    var boxes = document.getElementsByName(this.name); 
    for (var i=0; i<boxes.length; i++) { 
     if (boxes[i] != this) boxes[i].checked = false; 
    } 
});​ 

FIDDLE

+0

謝謝,我會繼續並測試這一點。 – rexdefuror

+0

這在Chrome中運行良好,在IE中仍然有問題。 – rexdefuror

+0

+因爲代碼是非常好的例子,它適用於除IE以外的所有瀏覽器。 – rexdefuror