0

これが私のhtmlです

#This will be generated throught loop

<li class="selector">
    <a>
    <input type="checkbox" value="test" /> test
    </a>
</li>

ここに私のjqueryクリックイベントがあります

$('.selector').on('click', function() {
    if($(this).find('input').is(':checked')){
    #uncheck the checkbox       
    }else{
    #check the checkbox
    }
});

チェックされている場合はチェックを外し、チェックされていない場合はチェックする方法

4

3 に答える 3

1

試す

$(document).on('click', '.selector', function (e) {
    if (!$(e.target).is('input')) {
        $(this).find('input').prop('checked', function () {
            return !this.checked;
        });
    }
});

デモ:フィドル

別の方法

$(document).on('click', '.selector', function (e) {
    $(this).find('input').prop('checked', function () {
        return !this.checked;
    });
});
$(document).on('click', '.selector input', function (e) {
    e.stopPropagation();
});

デモ:フィドル

于 2013-11-02T02:30:54.527 に答える
0

これを試して

$('.selector').on('click', function() {
        var checkbox = $(this).find(':checkbox');
        if($(checkbox).is(':checked')){
             $(checkbox).prop('checked', false);     
        }else{
        #check the checkbox
             $(checkbox).prop('checked', true);
        }
    });
于 2013-11-02T02:32:52.217 に答える
0

JavaScriptでこれをやろうとしている理由がわかりません。ユーザーがチェックボックスを直接クリックすると、それ自体が自動的にチェック/チェック解除されますが、JS でチェック/チェック解除するコードを追加すると、デフォルトの動作がキャンセルされるため、クリック ハンドラーでクリックがあったことをテストする必要があります。内の他の場所.selector

Anwyay、.prop()メソッドはあなたをカバーしています:

$('.selector').on('click', function(e) {
    if (e.target.type === "checkbox") return; // do nothing if checkbox clicked directly
    $(this).find("input[type=checkbox]").prop("checked", function(i,v) {
        return !v; // set to opposite of current value
    });
});

デモ: http://jsfiddle.net/N4crP/1/

ただし、「テスト」というテキストをクリックしてボックスをクリックできるようにすることが目標である場合は、JavaScript は必要ありません<label>

<li class="selector">
    <label>
    <input type="checkbox" value="test" /> test
    </label>
</li>

このデモでわかるように: http://jsfiddle.net/N4crP/2/ - テキスト「test」またはチェックボックスをクリックすると、JavaScript なしで現在の値が切り替わります。

于 2013-11-02T02:48:26.523 に答える