2010-11-30 96 views
2

我已經在很多的話題一直在尋找,但我沒有發現任何東西,真正符合我的問題,以取消一個單選按鈕:如何通過點擊它第二次

我要讓單選按鈕uncheckable (即,當它已經被選中時,通過點擊來取消單選按鈕)。

我發現使用隱藏的單選按鈕作爲臨時比較對象一些解決方案,但是這並不適合我現有的情況下,所以我想這樣做沒有其他單選按鈕。

我想簡單的測試和修改的「的onclick」事件的單選按鈕的狀態/值,但它一直不是全成...提前

感謝, 克萊姆。

回答

2

我知道這種行爲是非標準的單選按鈕,但海報所要求的功能。以下是我過去使用的代碼。我發現它並不是最優化的(假設有大量的單選按鈕),但我也沒有花時間做這種優化。

// Allow for radio button unchecking 
$(function(){ 
    var allRadios = $('input[type=radio]') 
    var radioChecked; 

    var setCurrent = function(e) { 
     var obj = e.target; 
     radioChecked = $(obj).attr('checked'); 
    } 

    var setCheck = function(e) { 
     if (e.type == 'keypress' && e.charCode != 32) { 
      return false; 
     } 
     var obj = e.target; 
     if (radioChecked) { 
      $(obj).attr('checked', false); 
     } else { 
      $(obj).attr('checked', true); 
     } 
    } 

    $.each(allRadios, function(i, val) { 
     var label = $('label[for=' + $(this).attr("id") + ']'); 
     $(this).bind('mousedown keydown', function(e){ 
      setCurrent(e); 
     }); 

     label.bind('mousedown keydown', function(e){ 
      e.target = $('#' + $(this).attr("for")); 
      setCurrent(e); 
     }); 

     $(this).bind('click', function(e){ 
      setCheck(e);  
     }); 
    }); 
}); 
16

這不是單選按鈕。如果你嘗試做這個工作,你只會混淆你的用戶。

如果你想要的東西,可以檢查,然後選中,使用複選框。單選按鈕僅用於選擇一組選項中的一個。

+1

我完全同意。 – karim79 2010-11-30 10:51:25

+1

如果他意味着將其恢復到原來的未選中狀態,該怎麼辦?對於用戶來說還有點混淆,但這是一個可以理解的要求。 – 2010-11-30 11:00:38

4

這樣也好,

onclick=" 
var isChecked = $(this).attr('is_che'); 
if (isChecked) { 
    $(this).removeAttr('checked'); 
    $(this).removeAttr('is_che'); 
} 
else { 
    $(this).attr('checked', 'checked'); 
    $(this).attr('is_che', 'true'); 
}"