函数在文本字段焦点上多次运行

时间:2009-12-28 03:29:40

标签: javascript jquery

我想调用一个函数,当我有一个文本域聚焦,然后不聚焦它(无论我按TAB或用鼠标点击其他地方),我使用了这段代码:

 $("#settings_view #my_profile_div input").focus(function() {
        $(this).blur(function() {
            change_my_profile();
        });
    });

当我第一次运行它时(有一个聚焦的场然后不聚焦它)它按预期运行一次。但是,它第二次调用函数change_my_profile两次。它第三次运行3次,依此类推。

这里有什么问题,如何解决? (我在change_my_profile之后尝试'throw'然后它只运行了一次,但我想找到问题所在。)

4 个答案:

答案 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处理程序附加一次。