Javascript 如何防止模糊事件多次触发?
我有一些特定的文本输入字段,如果用户更改了一个值,然后模糊了该文本字段,js将触发ajax请求,以更新数据库中的该值。问题是,我编写了一个测试来触发这样一个事件,我注意到内部的“模糊”事件通常在我从输入字段中签出后触发两到五次:Javascript 如何防止模糊事件多次触发?,javascript,jquery,onblur,Javascript,Jquery,Onblur,我有一些特定的文本输入字段,如果用户更改了一个值,然后模糊了该文本字段,js将触发ajax请求,以更新数据库中的该值。问题是,我编写了一个测试来触发这样一个事件,我注意到内部的“模糊”事件通常在我从输入字段中签出后触发两到五次: $('input[type=text]').on('input propertychange paste', function() { $(this).on('blur', function () { console.lo
$('input[type=text]').on('input propertychange paste', function() {
$(this).on('blur', function () {
console.log('blur');
});
});
即使在捕捉到模糊事件处理程序后立即将其关闭,它仍会触发两三次。如何使这种情况只发生一次?只需跟踪已触发的
布尔值:
var hasFired = false;
$('input[type=text]').on('input propertychange paste', function() {
$(this).on('blur', function () {
if(!hasFired){
hasFired = true;
console.log('blur');
}
});
});
实际上,这里真正的问题是您要多次绑定blur
事件。您可以使用类似上面的布尔值来防止:
var isBound = false;
$('input[type=text]').on('input propertychange paste', function() {
if(!isBound){
isBound = true;
$(this).on('blur', function () {
console.log('blur');
});
}
});
另一个解决方案是为那些已经被该事件绑定的元素创建一个类
$('input[type=text]').on('input propertychange paste', function() {
if(!$(this).hasClass("bound")) {
$(this).on('blur', function () {
$(this).addClass("bound");
console.log('blur');
});
}
});
它多次触发的原因是,每次更改输入元素的值时,您都会在输入元素上放置模糊处理程序的另一个副本。那么,为什么要在'input Property change paste'
事件中绑定模糊
事件呢?因为我只想在编辑字段后触发事件用户已从该字段中退出。如果我刚好赶上第一个事件,任何时候我输入一封新信,它都会被触发。谢谢。这部分起作用。我可以编辑一个字段一次,它将触发模糊一次。但是,如果我需要重新编辑同一个字段,由于明显的原因,模糊不会出现。我能做的是,一旦ajax启动了它的.done事件,就将其设置回false。@Joel:我编辑了我的文章,第二个选项应该对您更有效。