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 なしで現在の値が切り替わります。