双事件处理程序和一个函数。如何防止执行代码两次?
Double event handler and one function. How to prevent executing code twice?
所以我有一个回调函数绑定到两个事件(change
和 focusout
)。但是,只有当我们与之交互的元素不是 checkbox
.
时,我才需要 focusout 发生
这是示例代码:
$(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
});
上面的代码会执行两次:
- 当复选框得到 checked/unchecked
- 当您在复选框外单击时(失去焦点(模糊))
我尝试使用 .off
,但它最终完全杀死了 focousout
处理程序,稍后我将需要它来处理其他非复选框的元素。
有什么方法可以防止 focusout
处理程序针对某些元素触发?
你想做的是
$(document).on('focusout change', '.selector', function(event) {
event
是一个事件对象,它有属性,其中之一是type
。检查 type
您现在可以查看您的函数是否因 focusout
或 change
和 运行 代码而被调用
所以我有一个回调函数绑定到两个事件(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
});
上面的代码会执行两次:
- 当复选框得到 checked/unchecked
- 当您在复选框外单击时(失去焦点(模糊))
我尝试使用 .off
,但它最终完全杀死了 focousout
处理程序,稍后我将需要它来处理其他非复选框的元素。
有什么方法可以防止 focusout
处理程序针对某些元素触发?
你想做的是
$(document).on('focusout change', '.selector', function(event) {
event
是一个事件对象,它有属性,其中之一是type
。检查 type
您现在可以查看您的函数是否因 focusout
或 change
和 运行 代码而被调用