2013-02-04 111 views
7

我對我的jQuery有一個非常簡單的要求:檢查一組框,如果單選按鈕被選中,並且清除它們,如果另一個被選中。如果我點擊檢查他們所有(所有框檢查),然後單擊清除它們(所有框清除),然後再次單擊以檢查它們 - 在那裏沒有效果。同樣,如果我手動取消選中某些框,然後單擊以再次選擇全部,則不起作用。jQuery檢查和取消選中複選框只觸發一次

jQuery的

$('#all').on('change', function() { 
    if (!$(this).is(':checked')) { 
     $('.country').attr('checked', false); 
    } else { 
     $('.country').attr('checked', true); 
    } 
}); 


$('#none').on('change', function() { 
    if (!$(this).is(':checked')) { 
     $('.country').attr('checked', true);  
    } else { 
     $('.country').attr('checked', false); 
    } 
}); 

HTML

<div class="subselect"> 
    <input type="radio" class="TLO" name="radio1" id="all" />Check All 
<br /> 
     <input type="radio" class="TLO" name="radio1" id="none" />Clear All 
     <br /> 
    </div> 

    <br /> 
    <br /> 
    <div class="cselect" id="countries"> 
     <input type="checkbox" class="country" />1 
     <br /> 
     <input type="checkbox" class="country" />2 
     <br /> 
     <input type="checkbox" class="country" />3 
    </div> 

的jsfiddle http://jsfiddle.net/vsGtF/1/

+2

使用'.prop()',而不是'.AT TR()'。 – David

回答

29

更改.attr().prop()

$('#all').on('change', function() { 
    if (!$(this).is(':checked')) { 
     $('.country').prop('checked', false); 
    } else { 
     $('.country').prop('checked', true); 
    } 
});  
$('#none').on('change', function() { 
    if (!$(this).is(':checked')) { 
     $('.country').prop('checked', true);  
    } else { 
     $('.country').prop('checked', false); 
    } 
}); 

jsFiddle example

你也可以減少這只是:

$('#all').on('change', function() { 
    $('.country').prop('checked', $(this).is(':checked')); 
}); 
$('#none').on('change', function() { 
    $('.country').prop('checked', !$(this).is(':checked')); 
}); 

jsFiddle example

隨着文檔的.attr()狀態:

從jQuery 1.6開始,對於尚未設置的屬性 ,.attr()方法返回undefined。 要檢索並更改DOM屬性(如 )表單元素的選中狀態或選中狀態,請使用 .prop()方法。

+0

謝謝!我不知道道具()我會讀它。當時間滴答下來,我會接受你的回答。 – Gideon

+0

剛剛幫我解決了這個問題 - 你能解釋一下這個差別,爲什麼一個人工作,另一個不工作? – asfallows

+1

@ asfallows-我可以嘗試,但jQuery文檔已經有一個徹底的解釋:http://api.jquery.com/attr/ – j08691

2

我知道,這已經欺騙了很多在這裏,但我做錯過什麼,我有:

id = $(this).attr('id'); 
if($('#checkbox_' + id).prop('checked')){ 
    $('#checkbox_' + id).attr('checked', false); 
} else { 
    $('#checkbox_' + id).attr('checked', true); 
} 

和上面如提到的所有案件ATTR需要交換的道具()

if($('#checkbox_' + id).prop('checked')){ 
    $('#checkbox_' + id).prop('checked', false); 
} else { 
    $('#checkbox_' + id).prop('checked', true); 
} 

希望幫助別人......

+0

太棒了!這個對我有用。在.ch中使用.prop()工作,而不是attr() –

相關問題