2012-06-08 124 views
6

我有以下代碼。`.click(handler())`和`.click(handler)`之間的區別

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <script type="text/javascript" src="jquery-1.4.2.min.js" ></script> 
    <script type="text/javascript"> 
    function myFun() 
    { 
     alert(5) 
    } 
     $(document).ready(function(){ 
      $("#myID").click(myFun()); 
     }) 
    </script> 
</head> 

<body> 
    <input type="button" value="Click it" id="myID" /> 
</body> 
</html> 

當我運行此代碼,然後alert(5)即將在頁面加載時。如果我寫

$("#myID").click(myFun) 

那麼只有當我們點擊該按鈕出現警報。爲什麼它的行爲如此?

+0

HTTPS://developer.mozilla .org/en/JavaScript/Guide/Functions可能會有助於更好地理解功能。 –

回答

10
$("#myID").click(myFun()); 

這就要求myFun(),並嘗試安裝任何返回的事件處理程序。由於它沒有返回任何東西,你實際上是觸發點擊#myID

+1

@Lanzz ..如果你看到我的整個問題,我也稱爲你提到的功能。但有什麼區別。假設如果我想傳遞任何參數,那麼該怎麼做呢? – Searcher

+1

''(「#myID」)。click(function(){myFun(some,arguments)});' – lanzz

+1

當你傳遞函數()時,這意味着你打算調用該方法,如果你不這樣做將僅在實際點擊事件被觸發時被調用。 – mprabhat

3

閱讀本.click() - 綁定的事件處理程序click JavaScript事件,或者觸發使用JavaScript元素上的事件。

你只需要編寫的$("#myID").click(myFun);代替$("#myID").click(myFun());因爲當你寫myFun()在你的代碼的函數立即調用(而不是當上#myID點擊事件觸發)。

Working Demo

2

嘗試此上的click事件運行功能:

function myFun(){ 
    alert(5); 
} 

$(document).ready(function(){ 
    $("#myID").click(function(){ 
     myFun(); 
    }); 
}) 
2

試試這個:

這將工作

$(document).ready(function() { 
    function myFun() { 
     alert(5) 
    } 
      $("#myID").click(function(){ 
      myFun(); 
      }); 
});​ 
相關問題