JQuery изменить обработчик событий с флажком

0

У меня есть флажок, и когда он включен (отмечен), я хочу выполнить код. Он работает, но когда поле не отмечено, код все еще работает, я бы предпочел, чтобы он не работал, когда поле не отмечено. Следующий код находится в большей функции 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();

    })
   }

});
  • 0
    Обработчик событий внутри другого обработчика событий кажется очень плохой идеей, по крайней мере, в этом случае.
  • 0
    Как я могу исправить? Кажется, это должно быть простое исправление, дополнительный обработчик событий или нет. Правильно?
Показать ещё 1 комментарий
Теги:
checkbox

4 ответа

2
Лучший ответ

Здесь проверьте состояние флажка внутри обработчика события:

var moveCheckbox = $("#hMove728");
$( document ).keydown( function( key ) {
  if ( moveCheckbox.is(":checked") ) {
    // ...
  }
});
  • 0
    Спасибо! это работает. Я не совсем понимаю, почему, но по крайней мере это работает.
  • 0
    Это работает, потому что состояние флажка проверяется при каждом нажатии клавиши. В своем оригинале вы добавляли обработчик событий keydown в document каждый раз, когда нажимали на флажок - что, вероятно, является плохой идеей - лучше избегать определения обработчиков событий в другом обработчике событий.
0

Вы должны "отменить регистрацию" события "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();
});
0

в противном случае поставьте: $ (document).unbind('keydown');

который отменит событие с именем keydown на элементе документа.

0
$(function () {
    $('input').on('change', function () {
        if ($(this).prop('checked')) {
            // It is checked
        }
    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню