【发布时间】:2016-02-29 08:52:33
【问题描述】:
所以我有一个回调函数绑定到两个事件(change 和focusout)。但是,只有当我们与之交互的元素不是 checkbox 时,我才需要聚焦。
这是示例代码:
$(document).on('focusout change', '.selector', function() {
if ($(this).is(':checkbox')) {
// Do stuff and prevent the focusout to trigger. HOW???
}
doStuff(); // Action that applies to both cases, but needs to be limited at one execution only
});
上面的代码会执行两次:
- 当复选框被选中/取消选中时
- 当您在复选框外部单击时(失去焦点(模糊))
我尝试使用.off,但它最终完全杀死了focousout 处理程序,稍后我将需要它来处理其他不是复选框的元素。
防止focusout 处理程序触发某些元素的方法是什么?
【问题讨论】:
-
不要将事件监听器添加到您不想监听这些事件的元素 - 明智地使用类会有所帮助
-
嗯,我需要
focusout来处理一百万种不同的事情,而且我还需要避免代码重复。 -
好吧,给你不想要的类添加一个类,并在你的代码中寻找它和事件名称(它将是焦点或更改) - 你的代码不够清晰不幸的是,举个例子-但这里有一个提示。事件处理程序接收触发处理程序的事件作为它的第一个参数,该参数有一个名为 name 的属性,它是事件的名称(focusout/change) - 鉴于此以及您必须已经拥有的逻辑来识别您的元素不想让focusout事件执行你的代码,你应该可以很容易地避开代码
-
@JaromandaX 您可以发布您的
event.type建议作为答案,我会接受。我通过使用它解决了这个问题。 -
哦,是
type而不是name...看,教你钓鱼而不是给你一条鱼:p
标签: javascript jquery events javascript-events event-handling