2009-08-06 171 views
1

我在调用下面的第一个函数来将第二个函数绑定到onClick事件。jQuery绑定事件触发事件

奇怪的是,调用第一个函数会导致第二个函数发射。

第一个函数中的LinkName参数是表td元素的名称 - 可能不相关。

function EnableExpand(LinkName, i) { 
    $(LinkName).addClass("link-text"); 
    $(LinkName).bind("onclick", ExpandFrame(LinkName, i)); 
} 

function ExpandFrame(lName, i) { 
    $("#mapFrame" + i).attr({ height: 500, width: 800 }); 
} 

回答

4

问题是,.bind()的第二个参数应该是一个函数,但是您正在调用一个函数。 JQuery计算函数调用并尝试将结果绑定到click事件。

通过将函数调用包装在匿名函数中,如所建议的那样,javascript引擎会将包装函数绑定到事件上,而不会评估其中的内容。

$(LinkName).click(function() { ExpandFrame(LinkName, i) }); 

认识到使用以下内容等同于上面的代码可能会有帮助。

$(LinkName).click(function() { ExpandFrame(LinkName, i) }()); 
+0

谢谢,有爱的那些匿名功能... – GilShalit 2009-08-06 20:48:58

+0

+1很好的解释! – 2009-08-06 21:05:31

4

您需要传递一个将在点击事件发生时被调用的函数。您拥有它的方式,您立即调用该函数,并告诉JQuery调用该函数返回的任何值。

$(LinkName).bind("click", function() { ExpandFrame(LinkName, i); }); 
+0

正确,但它可以很好地解释为什么。 ;) – Joel 2009-08-06 20:40:21

+0

是的,为什么? 没关系,它的工作,谢谢! – GilShalit 2009-08-06 20:46:35

2

你不需要绑定。 .click会做。

$(LinkName).click(function() { ExpandFrame(LinkName, i) });