2012-04-11 37 views
12

Tôi đã viết một lớp javascript gọi là "MyClass" trong đó tôi đã xác định một phương pháp "closeThis"JavaScript - onclick sự kiện nhận được gọi là tự động

MyClass = function(){ 

this.closeThis = function(){ 
     document.getElementById("hidePane").style.display = 'none'; 
} 

} 

Bây giờ, trong html của tôi, tôi đang cố gắng để gọi đó là như sau ...

<script type="text/javascript"> 
    function callThis(){ 
     var myclassObj = new MyClass(); 
     document.getElementById("closeButton").onclick = myclassObj.closeThis(); 
    } 
</script> 

Cuộc gọi ở trênĐiều này sẽ được gọi khi tôi nhấp vào nút. Vấn đề ở đây là, "onclick" sự kiện trên đầu trang của "clsoeButtion" được gọi tự động khi tải trang. Điều gì có thể sai trong điều này?

+2

Xóa dấu ngoặc đơn sau ... onclick = myclassObj.closeĐây(). –

Trả lời

15

Bạn đang gọi chức năng ngay lập tức.

Khi bạn rời khỏi ngoặc trên tham chiếu chức năng, những gì bạn đang về cơ bản nói là:

Đánh giá closeThis chức năng và gán kết quả cho onclick

khi những gì bạn thực sự muốn làm là chỉ định tham chiếu hàm cho trình xử lý nhấp chuột:

document.getElementById("closeButton").onclick = myclassObj.closeThis; 

Rời khỏi dấu ngoặc đơn và bạn sẽ ràng buộc clo seThis chức năng để onclick. Thay vào đó, thay vào đó là:

Gán chức năng đóngNày cho trình xử lý nhấp chuột.

Bạn chủ yếu gán chức năng cho biến làm đối tượng hạng nhất hoặc tham chiếu đến hàm.

Ngoài ra, sở thích cá nhân của tôi là luôn sử dụng trình bao bọc chức năng ẩn danh. Đôi khi bạn cần để có thể vượt qua các thông số vào chức năng của bạn, và điều này làm cho chắc chắn rằng bạn có thể dễ dàng làm như vậy:

document.getElementById("closeButton").onclick = 
    function() { 
     myclassObj.closeThis(); 
    }; 
+2

Cảm ơn @ jmort253 Nó hoạt động như sự quyến rũ ... Cách tiếp cận đầu tiên bạn đề xuất giống như chỉ định kết quả cho sự kiện onclick kỳ lạ. Cách tiếp cận thứ hai là mát mẻ. Như bạn đã nói, bây giờ tôi vẫn có thể vượt qua các thông số. Cảm ơn nhiều :-) – Sriram

2

Bạn cần phải loại bỏ () từ nó nếu không nó sẽ được gọi ngay lập tức vì đó là cách bạn gọi một chức năng của suffixing (), vì vậy chỉ cần loại bỏ các dấu ngoặc:

document.getElementById("closeButton").onclick = myclassObj.closeThis; 
5

nó phải được document.getElementById("closeButton").onclick = myclassObj.closeThis; không myclassObj.closeThis();

myclassObj.closeThis() sẽ gọi hàm sau đó gán giá trị cho onclick

Các vấn đề liên quan