2015-11-11 13 views
5

Jquery bind() không được dùng nữa hoặc có thể sử dụng an toàn không?Có phải jquery .bind() không được chấp nhận?

tôi thấy rất nhiều ý kiến ​​về bind() bị phản đối trong ý kiến ​​và câu trả lời trên SO như: Jquery Event : Detect changes to the html/text of a div

Is there a JavaScript/jQuery DOM change listener?

và không biết nếu nó là an toàn để sử dụng nó hay không (không phân biệt nó tốt hơn hay tệ hơn).

Có gì về nó bị phản đối ở đây là: https://api.jquery.com/bind/

+6

Từ tài liệu API bạn có liên quan đến: * “Tính đến jQuery 1.7, phương pháp .Trên() là phương pháp ưa thích để gắn xử lý sự kiện cho một tài liệu.” * – Ryan

+1

ý nghĩa, không có nó không được dùng nữa và nó an toàn để sử dụng. chỉ không ... * "ưa thích" * –

+3

.bind thường được sử dụng bởi các plugin tương thích ngược với nhiều phiên bản cũ hơn của jQuery, đó là lý do tại sao nó sẽ không biến mất bất kỳ lúc nào. –

Trả lời

10

Tôi không tin nó bị phản đối nhưng on là phương pháp ưa thích của gắn các sự kiện.

http://api.jquery.com/bind/

Deprecated nghĩa là họ sẽ được gỡ bỏ nó trong tương lai nhưng tài liệu của họ dường như không nói như vậy.

EDIT:

Tính đến jQuery 3.0 bind IS phản đối. Liên kết trên vẫn có liên quan nhưng đã được cập nhật. Từ tài liệu của họ:

Vì jQuery 3.0, .bind() đã không được chấp nhận. Nó được thay thế bằng phương thức .on() để gắn các trình xử lý sự kiện vào một tài liệu từ jQuery 1.7, do đó việc sử dụng nó đã không được khuyến khích.

+0

bạn có thể cũng lắng nghe những thay đổi dom với trên? –

+1

@Claudiu: Bạn không thể nghe các thay đổi DOM bằng '.on' ** hoặc **' .bind'. Các sự kiện đột biến không bao giờ được hỗ trợ tốt, và đã bị bỏ rơi để ủng hộ [các nhà quan sát đột biến] (https://developer.mozilla.org/en/docs/Web/API/MutationObserver). MutationObserver được hỗ trợ tốt hơn nhiều so với các sự kiện cũ. –

+0

Ý nghĩa của các thay đổi DOM là gì? Bất cứ điều gì bạn đã làm với ràng buộc, bạn có thể làm với trên và nhiều hơn nữa. Vì tôi tin rằng ràng buộc không hỗ trợ các sự kiện được ủy quyền. Nói cách khác, phần tử phải tồn tại khi cuộc gọi đến ràng buộc diễn ra. – AtheistP3ace

5

Không nó không phải, đó là một sự khác biệt giữa .on.bind cơ bản .bind chỉ được gọi trực tiếp từ một yếu tố ví dụ $("#elem").bind(...), vì vậy các yếu tố phải tồn tại bởi thời gian chức năng ràng buộc được gọi. Và .on có thể được "liên kết" trên tài liệu i. e. $(document).on("click",".class",funcion(){...});, vì vậy nếu bạn thêm phần tử động bằng cách sử dụng .append hoặc cách khác, sự kiện sẽ hợp lệ.

+0

bạn có thể mở rộng một chút về sự khác biệt đó không? Tôi không hoàn toàn hiểu sự khác biệt là gì ngay cả sau khi đọc câu trả lời của bạn. (Tôi không nghĩ rằng có một sự khác biệt, khác hơn. Có chức năng ít hơn) –

+0

Ràng buộc không hỗ trợ các sự kiện được ủy quyền. Phần tử phải tồn tại trong DOM để đính kèm sự kiện. Ở đâu với bạn có thể đính kèm sự kiện vào đối tượng cha mẹ ngay cả khi phần tử bạn muốn sự kiện xảy ra trên đó chưa tồn tại. – AtheistP3ace

+0

Điều đó không đúng, vì để hỗ trợ các sự kiện được ủy nhiệm, phần $ ("") vẫn phải chọn một phần tử hiện có, nó không khác gì. –

3

Nó không được dùng nữa trong jQuery 1.1. Có thực sự là không có sự khác biệt (ngoài hình đó là sử dụng) trong phiên bản jquery 1.11.3 nếu bạn kiểm tra việc kê khai của sự kiện .bind bạn có thể thấy nó chỉ đơn giản gọi .on:

bind: function(types, data, fn) { 
    return this.on(types, null, data, fn); 
}, 

bị phản đối hoặc nó có thể được sử dụng một cách an toàn?

Như những người khác nói, không có nó không được chấp nhận và an toàn, nó chỉ là một chút dư thừa bây giờ và chỉ tồn tại cho khả năng tương thích ngược.

Mặc dù nó dường như trong được đánh dấu là bị phản đối trong later versions of jquery now

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