我有几个复选框。如果用户检查其中任何一个,我必须查看是否允许他们这样做,如果没有,请通知他们并取消选中它。然而,这让我陷入了循环,因为它再次触发了变化!我怎么能过来这个?
$('#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();
}
});
我无法取消绑定然后重新绑定更改事件,因为还有另一个插件依赖于此事件。
我还有其他选择吗?我可以为每个复选框附加一个函数调用,但我希望有一些更优雅的东西,如果没有,我将默认为此。
感谢大家的帮助
答案 0 :(得分:2)
您可以使用.trigger()
将其他参数传递给处理程序,我们将使用loop
。如果它是false
,请不要再次运行other-element触发器,如下所示:
$('#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);
}
});
答案 1 :(得分:0)
最简单的变化是这样的:
var inClickHandler = false;
function OnChecked(evt) {
if (inClickHandler) {
inClickHandler = false;
return;
}
inClickHandler = true;
// Do your stuff.
}
答案 2 :(得分:0)
你为什么叫这行? $('#other_stages :checkbox:not(#section_2_active, #co_t)').change();
据我所见,你不需要这个,它就不会循环了。除非您使用event.preventDefault();
并且.attr('checked',false);
不会触发更改,否则该复选框仍会检查,可能是因为您遇到的问题。