我想调用一个函数,当我有一个文本域聚焦,然后不聚焦它(无论我按TAB或用鼠标点击其他地方),我使用了这段代码:
$("#settings_view #my_profile_div input").focus(function() {
$(this).blur(function() {
change_my_profile();
});
});
当我第一次运行它时(有一个聚焦的场然后不聚焦它)它按预期运行一次。但是,它第二次调用函数change_my_profile两次。它第三次运行3次,依此类推。
这里有什么问题,如何解决? (我在change_my_profile之后尝试'throw'然后它只运行了一次,但我想找到问题所在。)
答案 0 :(得分:5)
每次启动焦点事件时它都绑定一个blur
事件,这就是你多次执行的原因
尝试
$(this).bind("blur",function(){
change_my_profile(this);
})
然后在change_my_profile
函数中执行以下操作
function change_my_profile(el){
$(el).unbind("blur");
//rest of the change_my_profile code goes here
}
答案 1 :(得分:2)
.focus()
和.blur()
函数将处理程序分配给'焦点'和'模糊'事件。因此,每次用户聚焦文本框时,您的代码都会向“模糊”事件添加新的事件处理程序。你想要的是:
$("#settings_view #my_profile_div input").blur(change_my_profile);
答案 2 :(得分:1)
成功执行后需要删除事件处理程序。否则,您在处理程序上堆叠处理程序并且它们都被触发。我认为在JQuery中使用unbind()
答案 3 :(得分:0)
您的代码要求jQuery在每次用户输入字段时将onBlur事件处理程序添加(追加)到输入字段。因此,您的相同事件处理函数会反复添加。您是否只是在用户离开某个字段时尝试触发一个函数来运行?如果是这种情况,您只需使用.blur将onBlur处理程序附加一次。