如何防止BLUR事件多次触发?

时间:2015-05-18 19:29:08

标签: javascript jquery onblur

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

    $('input[type=text]').on('input propertychange paste', function() {
        $(this).on('blur', function () {
            console.log('blur');
        });
    });

即使我在捕获后立即关闭模糊事件处理程序,它仍然会触发两到三次。我怎么才能让它只发生一次?

2 个答案:

答案 0 :(得分:6)

只需跟踪hasFired布尔值:

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');
        });
    }
});

答案 1 :(得分:0)

另一个解决方案是为那些已经被该事件绑定的元素创建一个类。

d3.xml("/svg/test.svg", "image/svg+xml", function(xml) {
    document.getElementById("mysvg").appendChild(xml.documentElement);
});