我有一些文本输入字段,如果用户更改某个值然后模糊掉该文本字段,js将触发并发出ajax请求以更新数据库中的该值。问题是我写了一个测试来解决这样的事件,我注意到内在的模糊'在输入输入字段后,事件通常会触发两到五次:
$('input[type=text]').on('input propertychange paste', function() {
$(this).on('blur', function () {
console.log('blur');
});
});
即使我在捕获后立即关闭模糊事件处理程序,它仍然会触发两到三次。我怎么才能让它只发生一次?
答案 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);
});