Цикл событий изменения JQuery - PullRequest
       26

Цикл событий изменения JQuery

1 голос
/ 19 октября 2010

У меня есть несколько флажков.Если пользователь проверяет какой-либо из них, я должен увидеть, разрешено ли ему это делать, если нет, уведомить его и снять флажок.Тем не менее, это зациклило меня, так как это снова вызывает изменение!Как я могу это повторить?

$('#step_1, #step_2, #step_3, #step_4').change(function(event) {
        if(!$('#section_2_active').attr('checked')){
            alert('You can not select output options when "Create Output" has not been selected.');

            $(this).attr('checked', false);

            $('#other_stages :checkbox:not(#section_2_active, #co_t)').change();
        }

});

Я не могу отменить привязку, а затем перепривязать событие изменения, поскольку есть другой плагин, который зависит от этого события.?Я могу прикрепить вызов функции к каждому флажку, но я надеюсь на что-то более элегантное, если нет, то по умолчанию это сделаю.

Спасибо всем за помощь

Ответы [ 3 ]

2 голосов
/ 19 октября 2010

Вы можете использовать .trigger() для передачи дополнительного параметра вашему обработчику, мы будем использовать loop. Если это false, не запускайте триггер другого элемента, как показано ниже:

$('#step_1, #step_2, #step_3, #step_4').change(function(event, loop) {
  if(!$('#section_2_active').attr('checked')){
    alert('You can not select output options when "Create Output" has not been selected.');
    $(this).attr('checked', false);
    if(loop !== false) 
      $('#other_stages :checkbox:not(#section_2_active, #co_t)').trigger('change', false);
  }
});
0 голосов
/ 19 октября 2010

Почему вы называете эту линию? $('#other_stages :checkbox:not(#section_2_active, #co_t)').change(); Насколько я понимаю, вам это не нужно, и тогда оно не зациклится. Флажок по-прежнему будет проверяться, если вы не используете event.preventDefault(); и .attr('checked',false); не будет вызывать изменения, возможно, из-за проблем, с которыми вы столкнулись.

0 голосов
/ 19 октября 2010

Самое простое изменение примерно так:

var inClickHandler = false;

function OnChecked(evt) { 
  if (inClickHandler) {
    inClickHandler = false;
    return;
  }
  inClickHandler = true;

  // Do your stuff.
}
...