两个事件处理程序和一个函数.如何防止代码执行两次
Double event handler and one function. How to prevent executing code twice?
我有一个回调函数绑定到两个事件(change
和focusout
)。然而,我需要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
处理程序触发某些元素的方法是什么?
您想要做的是
$(document).on('focusout change', '.selector', function(event) {
event
是一个事件对象,它具有属性,其中一个属性是type
。检查type
,您现在可以查看您的函数是否因focusout
或change
而被调用,并根据需要运行代码
最好的方法是将两个事件(或更多)影响到相同的函数,如下所示:
文本输入,例如
<input id="myfield" type="text" />
现在是Javascript
var myfield = document.getElementById('myfield');
myfield.onfocus = myfield.onchange = function(e)
{
//your code
}
Yo甚至可以添加其他元素
button.onclick = myfield.onkeyup = function(e)
{
//when the client press the enter key
if(e.key && e.key == "Enter")
{
//catch the target
}
//when the client click the button
else if(!e.key || e.target == button)
{
//catch the target
}
//otherwise you can do not care about the target and just execute your function
}
你必须只知道你可以添加许多元素和许多事件
element1.onfocus = element1.onblur = element2.onchange = element3.onchange = function(e){//your code}
相关文章:
- 如何防止jQuery中复选框单击时执行多个代码
- 用我的代码防止内存泄漏
- 如何修改此JavaScript代码以防止无限放大
- 恶意软件将代码注入我的Dojo/WebSocket应用程序:如何防止
- 如何防止html/javascript代码在文本框上运行
- 如何防止引导模式关闭表单提交使用代码点火器
- 防止在 Firefox 插件、iframe 中提升权限的 js 代码
- 添加代码以防止重复提交 JQuery 后提交不起作用
- 防止 php 在 Javascript 验证失败后执行代码,并防止某些字符使用 JS
- 如何防止输入字段中出现单击事件角度代码
- 如何防止黑盒脚本在逐步执行Javascript AngularJS代码时显示
- 如何防止代码在 JQuery 插件完成保存 cookie 之前执行
- 防止多个 JQuery 脚本破坏代码
- 如何防止注入的 JavaScript 文件参考代码在我的网页中运行
- 如何使此代码更有用(防止文本区域中的特殊字符)
- 如何防止恶意代码调用我的 JavaScript
- 主干-如何重构此代码以防止重影视图
- 两个事件处理程序和一个函数.如何防止代码执行两次
- 防止代码在完成之前重新执行
- 防止代码发生,直到