Javascript 结合两个事件处理程序,jQuery

Javascript 结合两个事件处理程序,jQuery,javascript,jquery,Javascript,Jquery,我想在一个物体上观察两个事件 input.blur(function(event) { ajaxSubmit(this); event.preventDefault(); }); form.submit(function(event) { ajaxSubmit(this); event.preventDefault(); }); 但我觉得这还不够干爽,我可以将两个事件绑定到我的对象input,并执行函数ajaxSubmit(),如果其中一个触发 如果你能做到以下几点,那将是

我想在一个物体上观察两个事件

input.blur(function(event) {
  ajaxSubmit(this);
  event.preventDefault();
});

form.submit(function(event) {
  ajaxSubmit(this);
  event.preventDefault();
});
但我觉得这还不够干爽,我可以将两个事件绑定到我的对象
input
,并执行函数
ajaxSubmit()
,如果其中一个触发


如果你能做到以下几点,那将是非常酷的:

input.bind("blur", "submit", function(event) {
  ajaxSubmit(this);
  event.preventDefault();
});

是的,只需声明函数,然后将其绑定到事件:

var ajaxCallback = function(event){
  ajaxSubmit(this);
  event.preventDefault();
};

input.blur(ajaxCallback);
form.submit(ajaxCallback);
关于变量声明的注意事项:

正如@cletus所指出的,我声明函数的方式提供了一个变量,该变量对于定义它的任何范围都是私有的。我总是以这种方式编程,以尽量减少对全局名称空间的污染。但是,如果未定义此回调并将其绑定到同一代码块中的元素,则应以以下方式定义它:

function ajaxCallback(event){ ... }
这样,以后使用
.blur
.submit
方法将其绑定到任何地方都可以使用。

您可以使用该方法


可以组合任意数量的事件;用空格隔开它们。

你说的是“一个对象”,但你的示例引用了两个对象(
input
form
)。耶。。。我在那里真的没有任何意义。但如果它们是同一个物体呢?这些事件是有意义的,比如“悬停”和“模糊”之类的?是否有一种更简单的方法来绑定多个事件?当然,这不起作用,因为输入字段没有
submit
事件,但是绑定多个事件的概念是合理的。他可以在绑定函数中连接任何事件。@adamantium,很抱歉我不清楚。代码不会抛出错误,但是
submit
事件不会在
form
submit上调用,这似乎是OP的意图。嘿,你实际上回答了我的问题,尽管我像傻瓜一样问,而且毫无意义,谢谢大家!最好定义函数:函数ajaxCallback(){…}。当你尝试使用它时,你的方法可能会使变量未定义,而一个直接的函数定义没有这个问题。@cletus我是故意这样写的,但是你有一个很好的观点,那就是对于那些阅读我的答案的人来说,差异可能不会立即显现出来。我对它进行了更新,以提供一些关于声明函数选项的解释。谢谢@DougNeiner:您在函数表达式之后绑定了处理程序,因此代码很好。这两个表达式都在代码所在的任何范围内定义函数。@如果函数声明和绑定调用出于某种原因位于单独的
$(function(){…})
块中,或者位于封装在闭包中的单独文件中,则差异可能会导致问题。
$("#yourinput").on("blur submit", functionname);