Javascript 如何防止模糊事件多次触发?

Javascript 如何防止模糊事件多次触发?,javascript,jquery,onblur,Javascript,Jquery,Onblur,我有一些特定的文本输入字段,如果用户更改了一个值,然后模糊了该文本字段,js将触发ajax请求,以更新数据库中的该值。问题是,我编写了一个测试来触发这样一个事件,我注意到内部的“模糊”事件通常在我从输入字段中签出后触发两到五次: $('input[type=text]').on('input propertychange paste', function() { $(this).on('blur', function () { console.lo

我有一些特定的文本输入字段,如果用户更改了一个值,然后模糊了该文本字段,js将触发ajax请求,以更新数据库中的该值。问题是,我编写了一个测试来触发这样一个事件,我注意到内部的“模糊”事件通常在我从输入字段中签出后触发两到五次:

    $('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:我编辑了我的文章,第二个选项应该对您更有效。