2012-06-08 42 views
6

Tôi có đoạn mã sau.Sự khác biệt giữa `.click (handler())` và `.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> 

Khi tôi chạy mã này thì alert(5) sẽ xuất hiện khi trang tải. Nếu tôi viết

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

thì cảnh báo chỉ xuất hiện khi chúng tôi nhấp vào nút. Tại sao nó cư xử như thế này?

+0

https: //developer.mozilla .org/vi/JavaScript/Hướng dẫn/Chức năng có thể hữu ích để hiểu các chức năng tốt hơn. –

Trả lời

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

Gọi số myFun() và cố gắng cài đặt bất cứ thứ gì trở lại làm trình xử lý sự kiện. Vì nó không trả lại bất cứ điều gì, bạn thực sự là kích hoạt nhấp chuột vào #myID.

+1

@Lanzz .. nếu bạn thấy toàn bộ câu hỏi của tôi, tôi cũng gọi chức năng như bạn đã đề cập. Nhưng sự khác biệt là gì. Giả sử nếu tôi muốn vượt qua bất kỳ đối số thì làm thế nào để làm điều đó? – Searcher

+1

'$ (" # myID "). Click (function() {myFun (một số, đối số)}); ' – lanzz

+1

khi bạn truyền hàm() có nghĩa là bạn định gọi phương thức đó, nếu bạn không có nó sẽ chỉ được gọi khi sự kiện nhấp thực sự được kích hoạt. – mprabhat

3

Đọc điều này .click() - Liên kết trình xử lý sự kiện với sự kiện JavaScript click hoặc kích hoạt sự kiện đó trên một phần tử sử dụng JavaScript.

Bạn chỉ cần phải viết $("#myID").click(myFun); thay vì $("#myID").click(myFun()); bởi vì khi bạn viết myFun() trong mã của bạn chức năng được gọi ngay lập tức (chứ không phải là khi một đám cháy sự kiện click vào #myID).

Working Demo

2

Hãy thử điều này để chạy các chức năng trên các sự kiện nhấp chuột:

function myFun(){ 
    alert(5); 
} 

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

Hãy thử điều này:

này sẽ làm việc

$(document).ready(function() { 
    function myFun() { 
     alert(5) 
    } 
      $("#myID").click(function(){ 
      myFun(); 
      }); 
});​ 
Các vấn đề liên quan