У меня есть флажок, и когда он включен (отмечен), я хочу выполнить код. Он работает, но когда поле не отмечено, код все еще работает, я бы предпочел, чтобы он не работал, когда поле не отмечено. Следующий код находится в большей функции jQuery, которая работает. Я просто не могу заставить код перестать работать, когда я сниму флажок. Для справки, флажок позволяет пользователю использовать клавиши со стрелками для настройки элемента холста. Я хочу, чтобы они могли настраиваться, когда ящик checekd и не может настраиваться, когда он не установлен.
$("#hMove728").click( function(){
if($(this).is(':checked')){
alert("checked");
$(document).keydown(function(key) {
switch(parseInt(key.which,10)) {
case 38:
context.yB -= 2;
break;
case 39:
x += 2;
break;
case 40:
y += 2;
break;
case 37:
x -= 2;
break;
default:
break;
}
update();
})
}
});
Здесь проверьте состояние флажка внутри обработчика события:
var moveCheckbox = $("#hMove728");
$( document ).keydown( function( key ) {
if ( moveCheckbox.is(":checked") ) {
// ...
}
});
document
каждый раз, когда нажимали на флажок - что, вероятно, является плохой идеей - лучше избегать определения обработчиков событий в другом обработчике событий.
Вы должны "отменить регистрацию" события "keydown" на вашем документе, когда вы удалите чек, или вы можете сделать проверку внутри своей функции keydown. Как это:
$(document).keydown(function(key) {
if(!$("#hMove728").is(':checked')) return;
switch(parseInt(key.which,10)) {
case 38:
context.yB -= 2;
break;
case 39:
x += 2;
break;
case 40:
y += 2;
break;
case 37:
x -= 2;
break;
default:
break;
}
update();
});
в противном случае поставьте: $ (document).unbind('keydown');
который отменит событие с именем keydown на элементе документа.
$(function () {
$('input').on('change', function () {
if ($(this).prop('checked')) {
// It is checked
}
});
});