将带参数的函数传递给事件处理程序

时间:2014-04-01 09:09:44

标签: javascript jquery

我们说我有以下代码:

$('#from').focus(listExpand(1));
$('#to').focus(listExpand(3));

它没有像我预期的那样工作。我认为它是错误的,因为我传递的是函数结果而不是函数本身。

所以正确的语法是:

$('#from').focus(listExpand); // no brackets and no parameters

但在这种情况下,我无法将任何参数传递给函数:(

如何实施主题?

3 个答案:

答案 0 :(得分:5)

下面的

会起作用。用这个。

$('#from').focus(function() {listExpand(1) });
$('#to').focus(function(){listExpand(3);})

我发现@sudher也提到了其他很酷的方式。您可以在http://jsfiddle.net/kvHDA/

中查看它

示例代码

$('#from').focus({x: 1},myfunc);

function myfunc( e){
     alert(e.data.x);
}

答案 1 :(得分:5)

在单独的函数定义中包含对listExpand的调用:

$('#from').focus(function(){ listExpand(1); });
$('#to').focus(function(){ listExpand(3); })

答案 2 :(得分:3)

  

如果向.on()提供了数据参数,并且该参数不为null或未定义,   它每次都传递给 event.data 属性中的处理程序   触发事件。

$('#from').on("focus" , {id:1} , listExpand);
$('#to').on("focus" , {id:3} , listExpand);

function listExpand(event){

   console.log(event.data.id);
}