這應該是正確的代碼,但它不工作jQuery的取消選中單選按鈕不工作
<input type="radio" name="test">1
<input type="radio" name="test">2
$('input[name=test]').click(function() {
$('input[name=test]').attr(‘checked’,false);
});
例如這裏
編輯:
我忘了應該說,行如果它的檢查,然後取消選中它
這應該是正確的代碼,但它不工作jQuery的取消選中單選按鈕不工作
<input type="radio" name="test">1
<input type="radio" name="test">2
$('input[name=test]').click(function() {
$('input[name=test]').attr(‘checked’,false);
});
例如這裏
編輯:
我忘了應該說,行如果它的檢查,然後取消選中它
更改.attr
到.prop
,它會正常工作。您還需要改變你正在使用周圍的引號「檢查」是正確的類型,因爲這也導致它在一觸即發:
$('input[name=test]').click(function() {
$(this).prop('checked',false);
});
你可以看到在這個example fiddle這方面的工作。
更新(基於評論)
現在,我真正瞭解需要什麼,需要不同的方法。你需要記住的checked
屬性以前的值,將其存儲在一個屬性:
$('input[name=test]').click(function(e) {
var previous = $(this).attr('previous');
if(previous){
$(this).prop('checked', false)
}
$(this).attr('previous', $(this).prop('checked'));
});
看到這個工作here。
更新2(基於進一步的評論)
從第一更新上述代碼不相當的工作,因爲點擊在該組不同的無線電按鈕時,先前檢查無線電遺體previous
屬性設置,但收音機實際上沒有被檢查。我們能避免這種情況如下:
var previousElem;
$('input[name=test]').click(function(e) {
var previous = $(this).attr('previous');
if(previous && previousElem === this){
$(this).prop('checked', false);
}
previousElem = this;
$(this).attr('previous', $(this).prop('checked'));
});
$('input[name=test]').prop('checked', false);
的jQuery 1.6或更高版本,您可以使用.prop()
的值是這樣的:
這當然,假設你的目標就是誘使用戶選擇單選按鈕來拒絕他們。
如果要使用jQuery 1.6+
$('input[name=test]').filter(':checked').prop('checked', false);
對於早期版本中刪除 '選中' 屬性:
$('input[name=test]').filter(':checked').removeAttr('checked');
編輯修復有機磷農藥實際問題,即你如何讓中單擊當前選定的按鈕時,未選中的一組所有單選按鈕,這個工程(在Chrome 12,至少):
$('input[name=test]').click(function(e) {
// find out whether it was already checked
var wasChecked = $(this).data('checked') || false;
// ensure all buttons think they're unchecked
$('input[name=test]').data('checked', false);
if (wasChecked) {
// leave them all unchecked
this.checked = false;
} else {
// just check this one
this.checked = true;
$(this).data('checked', true);
}
});
我知道這是一個老的文章,但我有一個更優雅的解決方案:
$('input[type="radio"]').mouseup(function() {
if ($(this).prop('checked')) {
$(this).one('click', function() {
$(this).prop('checked', false);
});
}
});
它附加一個mouseup
處理程序的單選按鈕。這是因爲顯然單選按鈕的狀態已經在mouseup
和click
事件之間的某處發生了變化。當你釋放鼠標按鈕時,我們知道單選按鈕的當前狀態。 只有如果它是檢查,我們將一次性click
處理程序附加到取消選中它的單選按鈕。
UPDATE:
我做了這個一個jQuery plugin。它還支持單擊標籤並僅捕獲鼠標左鍵單擊。
你究竟想要做什麼?根據你的代碼,當你點擊它們時不會檢查任何東西,但如果這是你的目標,那麼你應該添加'disabled'屬性。你能否提供更多關於你最終目標的細節。 – Seth
給這兩個無線電「禁用」屬性不是更容易嗎? (編輯:heh似乎塞思和我有相同的印象;) –
取消選中哪個?您似乎要求點擊選中的元素,清除_both_上的檢查項? – Alnitak