Я не понимаю, почему вы пытаетесь сделать это с помощью JavaScript. Если пользователь нажимает на этот флажок, он автоматически проверяет/снимает флажок, но если вы добавите код для проверки/снятия отметки с него в JS, который будет отменять поведение по умолчанию, поэтому в обработчике кликов вам нужно будет проверить, что клик был в другом месте в пределах .selector
.
Anwyay, то .prop()
method покрывали Вас:
$('.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.
Боковой комментарий, вы уверены, что хотите связать событие с тегом li, а не на входе? и используйте 'on ('change')', а не 'on ('click')' –
Вы можете использовать '.prop()', вы также можете проверить это [Как установить флажок с jQuery] (http: //stackoverflow.com/questions/426258/how-do-i-check-a-checkbox-with-jquery) –
Зачем вам jQuery/JS здесь? Это стандартное поведение для щелчка на флажке, чтобы снять флажок и наоборот. Почему у вас есть флажок внутри тега привязки? – nnnnnn