Jquery change loop событий
-
09-10-2019 - |
Вопрос
У меня есть несколько флажков. Если пользователь проверяет любой из них, я должен посмотреть, разрешено ли им делать это, если нет, сообщите им и снимите его. Тем не менее, это заставим меня в цикле, так как он снова запускает изменения! Как я могу заняться этим?
$('#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();
}
});
Я не могу невидить, а затем перемириться с событием изменения, так как есть другой плагин, который зависит от этого события.
Какие еще варианты у меня есть? Я могу приложить функцию звонка к каждому флажкому ящику, но я надеюсь на что-то немного более элегантное, если нет, я по умолчанию по умолчанию этому.
Спасибо всем за любую помощь
Решение
Ты можешь использовать .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);
}
});
Другие советы
Самые простые изменения это что-то подобное:
var inClickHandler = false;
function OnChecked(evt) {
if (inClickHandler) {
inClickHandler = false;
return;
}
inClickHandler = true;
// Do your stuff.
}
Почему вы называете эту линию? $('#other_stages :checkbox:not(#section_2_active, #co_t)').change();
Насколько я вижу, вам это не нужно, и это не будет петлей. Флажок все еще будет проверять, если вы не использовали event.preventDefault();
и то .attr('checked',false);
Не будет срабатывать изменить, возможно, из-за проблем, которые у вас есть.