2013-02-04 11 views
7

私はjQueryの非常に単純な要件を持っています:ラジオボタンがチェックされている場合はチェックボックスを、チェックされている場合はすべてクリアします。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()に変更します。

.attr()状態のためのドキュメントとして

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

jsFiddle example

$('#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

また、これにだけを減らすことができます

.attr()メソッドは、jQuery 1.6から、設定されていない属性 に対して未定義を返します。 などのDOMプロパティを取得および変更するには、フォーム要素のチェック、選択、または無効の状態を .prop()メソッドを使用します。

+0

ありがとう!私はprop()について知りませんでした。私はそれについて読むでしょう。時間がたつと答えが出ます。 – 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の必要性()

のALL例は 上述したように
if($('#checkbox_' + id).prop('checked')){ 
    $('#checkbox_' + id).prop('checked', false); 
} else { 
    $('#checkbox_' + id).prop('checked', true); 
} 

誰かを役に立てば幸い...

+0

素晴らしい!わたしにはできる。 chromeで.prop()を使用し、attr()を使用しない –

関連する問題