2010-04-06 114 views
0

我想設置我的窗體上的按鈕的單擊事件,出於某種原因,我越來越奇怪的行爲。當我將click事件綁定到一個不帶參數的函數時,事情似乎很好。但是當我將事件綁定到一個帶有參數的函數時,事件就會在文檔準備好並單擊時觸發。有任何想法嗎?jQuery事件觸發文檔就緒

例1:

這將導致一個警告對話框開火準備,並單擊按鈕時。

jQuery(document).ready(function(){ 
    $('myButton').click(alert('foo')); 
}); 

例2:

這將導致一個警告框,火ONLY按鈕被按下時。

jQuery(document).ready(function(){ 
    $('myButton').click(wrapper); 
}); 

// External js file 
function wrapper(){ 
    alert('bar'); 
} 
+0

高雅的downvote非常有意義。 – Gabe 2013-05-20 20:25:50

回答

6

你需要一個anonymous function (read this for more complete explanation),像這樣:

jQuery(function() { 
    $('myButton').click(function() { 
    alert('foo'); 
    }); 
}); 

單擊處理需要一個功能,會發生什麼內部的功能是你的,但它不能通過事件... JavaScript的只是沒有按這樣工作。當你用匿名函數包裝你的代碼時,整個事情都會執行,而不管內部的函數或參數。

1

$('myButton').click(alert('foo'));調用alert('foo')(彈出一個警告),然後結合的Click事件到alert返回值(這是一回事警報)。你可能會想使用匿名函數,就像Nick所建議的那樣。

0
jQuery(document).ready(function(){ 
    $('myButton').click(function(){ 
     wrapper(); 
    }); 
}); 
0

這是一個古典錯誤。你所做的實際上是在click事件監聽器中給出返回值,而不是javascript函數對象。

如果你堅持使用上的方法,你就必須使用eval(這是最好不要使用)

你的下方法工作,和匿名函數工作了。

0

包裝是一種功能,而警報是Window對象的一個​​方法...

HTH