2012-06-08 81 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(); 
      }); 
});​ 
相关问题