2009-02-06 29 views
112

Khi sử dụng jQuery để hookup một event handler, là có bất kỳ sự khác biệt giữa việc sử dụng phương pháp bấm

$().click(fn) 

so với sử dụng phương pháp ràng buộc

$().bind('click',fn); 

Khác với tham số tùy chọn dữ liệu ràng buộc của.

+0

Dường như nhấp chuột cũng có thông số dữ liệu tùy chọn. Có ai biết nếu có bất kỳ sự khác biệt nào giữa cách nó hoạt động? Nguồn: http://api.jquery.com/click/ –

Trả lời

134

Đối với những gì nó có giá trị, từ jQuery source:

jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick," + 
    "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," + 
    "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){ 

    // Handle event binding 
    jQuery.fn[name] = function(fn){ 
     return fn ? this.bind(name, fn) : this.trigger(name); 
    }; 
}); 

Vì vậy, không, không có sự khác biệt -

$().click(fn) 

cuộc gọi

$().bind('click',fn) 
+6

True - 'click()' về cơ bản là viết tắt của 'bind ('click')' (hoặc, trong ngày này một tuổi, nó thực sự gọi là 'on (') Cách tôi nhìn thấy nó, bạn cũng có thể tiết kiệm cho mình rằng gọi hàm bổ sung bằng cách sử dụng 'on ('click')' trực tiếp. – Nix

+0

Chúng thực hiện tương tự nhưng bind() cho phép bạn nói, tôi muốn một cái gì đó để xảy ra khi sử dụng dao động VÀ nhấp chuột vv Xem http://stackoverflow.com/a/519455/292408 dưới đây cho ví dụ.Bạn có thể tất nhiên chỉ liên kết với một sự kiện, ví dụ như 'click' là tốt. –

7

Có một sự khác biệt ở chỗ bạn có thể ràng buộc các sự kiện tùy chỉnh bằng cách sử dụng biểu mẫu thứ hai mà bạn có. Nếu không, chúng có vẻ đồng nghĩa. Xem: jQuery Event Docs

95

+1 cho câu trả lời của Matthew , nhưng tôi nghĩ tôi nên đề cập rằng bạn cũng có thể liên kết nhiều hơn một sự kiện andler trong một đi sử dụng bind

$('#myDiv').bind('mouseover focus', function() { 
    $(this).addClass('focus') 
}); 

đó là sạch các nhiều tương đương với:

var myFunc = function() { 
    $(this).addClass('focus'); 
}; 
$('#myDiv') 
    .mouseover(myFunc) 
    .focus(myFunc) 
; 
+19

+1 Điều đó ràng buộc nhiều sự kiện là tin tức với tôi và có thể khá hữu ích. – cletus

+1

Vâng, đó là điều tuyệt vời để biết. –

1

Có là [dữ liệu] tham số của ràng buộc đó sẽ chỉ xảy ra tại ràng buộc thời gian, cùng một lúc.

Bạn cũng có thể chỉ định các sự kiện tùy chỉnh làm tham số đầu tiên của liên kết.

0

Nếu bạn có Google Chrome, công cụ dành cho nhà phát triển của họ có công cụ trình xử lý sự kiện, chọn phần tử bạn muốn theo dõi sự kiện của nó.

Bạn sẽ thấy rằng việc thử cả hai cách dẫn đến cùng một kết quả, vì vậy chúng tương đương nhau.

0

Tôi thích .bind() vì giao diện nhất quán với .live(). Nó không chỉ làm cho mã dễ đọc hơn mà còn giúp dễ dàng thay đổi một dòng mã để sử dụng một phương thức thay vì phương thức khác.

1

Tôi tìm thấy .click() là cách hợp lý hơn, nhưng tôi đoán đó là cách bạn nghĩ về mọi thứ.

$('#my_button').click(function() { alert('BOOM!'); }); 

Dường như đơn giản như bạn đã chết.

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