1

チェックされていないものがある場合、すべてのチェックボックスをチェックすることになっている関数があります。それらがすべてチェックされている場合は、それらすべてのチェックを外します。

check allリンクを3回クリックするまで、期待どおりに機能します。

  1. 最初のクリックでそれらすべてをチェックします
  2. 2回目のクリックで、すべてのチェックを外します
  3. 3回目のクリックですべてをもう一度確認することになっていますが、確認しません
function CheckAll(name) {
    name = name.replace(/[[]/g, '\\[').replace(/]/g, '\\]');

    if ($('input[name=' + name + ']:checkbox:not(:checked)').length) {
        $('input[name=' + name + ']:checkbox:not(:checked)').attr('checked', true);
    } else {
        $('input[name=' + name + ']:checkbox:checked').attr('checked', false);
    }
}

シンプルなHTML

    <a href="#" onclick="CheckAll('users[]')">Check All</a><br/><br/>
    <input type="checkbox" name="users[]" checked="checked"/><br/>
    <input type="checkbox" name="users[]"/><br/>
    <input type="checkbox" name="users[]"/><br/>
    <input type="checkbox" name="users[]"/><br/>
    <input type="checkbox" name="users[]"/><br/>
    <input type="checkbox" name="users[]"/><br/>
    <input type="checkbox" name="users[]"/><br/>
    <input type="checkbox" name="users[]"/><br/>
    <input type="checkbox" name="users[]"/><br/>
    <input type="checkbox" name="users[]"/><br/>

jsFiddleリンク

4

2 に答える 2

3

jquery 1.6以降を使用している場合は、.prop()代わりに使用する必要があります.attr()

そのバージョン以降、プロパティは属性とは異なる方法で処理され、チェック対象は属性ではなくプロパティです。

何が起こっているのかというと、.attr()は属性が存在するかどうかをチェックするだけで、値が何であるかは関係ありません。trueしたがって、.attr()を使用すると、checked="false"は引き続きを返します。

.prop()を使用すると、プロパティ値が正しく返されます。これは、私が示した例ではfalseになります。

于 2013-03-19T20:44:54.590 に答える
0

prop() の代わりに使用することをすでに提案しています.attr()。そして、より少ないコードを使用して結果を達成できると思います。

function CheckAll(name) {
    name = name.replace(/[[]/g, '\\[').replace(/]/g, '\\]'),
    checkboxes = 'input[name=' + name + ']:checkbox';
    $(checkboxes).prop('checked', $(checkboxes + ':checked').length !== $(checkboxes).length);
}
于 2013-03-19T21:09:46.593 に答える