2012-02-21 163 views
1
HTML 

<input type="button" id="test" value="testMe"> 

的JavaScript - >jQuery函數傳遞參數

var abc = '5'; 
j('#test').click(meraFunc(abc)); 
function meraFunc(abc) 
{ 
    alert(abc); 
} 

當我加載網頁,警報彈出顯示 '5'[我還沒有尚未點擊的按鈕。當我點擊按鈕時,沒有任何反應。這是在jQuery中傳遞參數的正確方法嗎?

j('#test').click(function() { 
    meraFunc(abc); 
}); 

回答

6

與匿名函數(jsfiddle demo)把它包

j('#test').click(meraFunc(abc)); 

您是調用 meraFunc然後傳遞任何它返回(unde罰款)到.click()功能。這就是警報立即彈出的原因。

你需要傳遞一個函數引用.click()這將是這樣的:

j('#test').click(meraFunc); // no parens after meraFunc 

但後來如何傳遞參數?包裹呼叫另一個函數如下:

j('#test').click(function() { 
    meraFunc(abc); 
}); 

請注意,我還添加了匿名函數後沒有()括號所以它不會立即調用。然後,當發生實際的點擊事件時,匿名函數將被調用,並且它將依次調用您的函數,其參數爲meraFunc(abc)

+0

Perfectoooo!..在10分鐘內接受.. [SO規則... :)] – Umesh251 2012-02-21 05:21:29

-1
Var abc= 5; 
$('#test').click(function()); 
function meraFunc(abc) 
{ 
    alert(abc); 
} 

享受

+0

這是否真的有用? – Paul 2013-02-26 18:55:07

8

的問題是,在這條線:

+0

+1爲解釋它的理由。 – harag 2012-02-21 14:01:05

0

@ Umesh251:我知道你已經從@heikkim得到有效的解決方案,但只是想解釋你現有代碼的異常行爲。

$('#test').click(meraFunc(abc)); 

,因爲你沒有點擊事件結合#test你都拿到在頁面加載警報。這就是爲什麼當您手動點擊測試按鈕時沒有提示。

+0

這並不完全正確。它在函數名後面立即調用'meraFunc',然後它將返回值從'meraFunc()'(這恰好是未定義的)傳遞給'.click()'函數。這不會調用click事件,但顯然它不綁定處理程序,因爲您無法綁定未定義的事件。 – nnnnnn 2012-02-21 05:59:17

+0

@nnnnnn:那就是我說的。只是忘了提及'meraFunc(abc)'不返回任何東西。這裏究竟發生了什麼,它既不會綁定也不會調用點擊事件。 http://jsfiddle.net/BPv3n/2/ – codef0rmer 2012-02-21 06:28:31

+0

我反對的部分是你說它「調用click _event_」(我強調)的地方。 – nnnnnn 2012-02-21 06:48:14