2009-08-06 287 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) });