不直接在Event侦听器中定义函数

时间:2012-02-19 12:17:43

标签: jquery

这是一个简单的听众:

$("#target").keypress(function(event) {
  alert("test");
});

我想把单独的功能拿出去,但它不起作用:

$("#target").keypress(doAlert(event));

function doAlert(event)
{
  alert("test");
}

我错过了什么?

2 个答案:

答案 0 :(得分:2)

你想:

$("#target").keypress(doAlert);

你原来的:

$("#target").keypress(doAlert(event));

... 调用 doAlert函数,并将其返回值传递给keypress,就像任何其他函数调用一样。您希望keypress 引用doAlert函数,您不希望给它doAlert的返回值。 (如果创建了doAlert并返回了一个事件处理函数,那么你可以这样做,但这不是你写的。)

答案 1 :(得分:0)

它不起作用,因为doAlert(event)立即正在调用 该功能。记住在JS中,你通过在()之后放置来调用函数,那就是你在那里做的那些不起作用,因为keypress需要回调,在keypress处理程序完成后运行。

所以,你应该:

$("#target").keypress(doAlert);