2012-05-09 30 views
11

tôi dường như không thể quấn quanh đầu tôi sự khác biệt giữa sau trong jQuery Mobile:jQuery Mobile đại biểu vs live vs bind

$(document).live('pageshow', function(event) { 
}); 

$(document).bind('pageshow', function(event) { 
}); 

$(document).delegate("#page", "pageshow", function() { 
}); 

Làm thế nào để thực hiện kịch bản vào đầu của tài liệu của tôi mà KHÁC trong một số trang nhất định? Tôi sử dụng phương pháp nào để gọi các tập lệnh đó?

Cập nhật: jQuery phiên bản: 1.7.1 phiên bản jQuery Mobile: 1.1.0

Trả lời

15

bạn sẽ liên kết với một "sự kiện trang" mà jQuery Mobile cho thấy, giống như pageinit:

$(document).delegate('#my-page', 'pageinit', function() { 
    //this is like document.ready for this pseudo-page 
}); 

Vì bạn đang sử dụng jQuery Lõi 1.7.1 bạn có thể sử dụng .on() trong đó có một cú pháp hơi khác nhau:

$(document).on('pageinit', '#my-page', function() { 
    //this is like document.ready for this pseudo-page 
}); 

Cả ba phương pháp của bạn làm những điều tương tự. .live() giống với việc sử dụng .delegate() với số document làm lựa chọn gốc nhưng nó đã bị khấu hao do đó, nên ngừng sử dụng nó (nguồn: http://api.jquery.com/on). Sử dụng .bind() trực tiếp trên phần tử document giống như sử dụng .delegate() nhưng khi bạn sử dụng .bind(), bạn phải xác định trang giả nào có sự kiện được kích hoạt trên trình xử lý sự kiện thay vì trong cuộc gọi hàm.

Ví dụ:

$(document).bind('pageshow', function() { 
    var id = $.mobile.activePage[0].id; 
    //you can use $.mobile.activePage to do work on the current page 
}); 

Nói chung, đoàn sự kiện được sử dụng khi chúng ta không biết khi nào một phần tử sẽ tồn tại trong DOM. Nó dựa trên các sự kiện tạo bọt cho DOM cho đến khi chúng đến được lựa chọn gốc (trong trường hợp của bạn nó luôn là phần tử document).

Documents cho .delegate(): http://api.jquery.com/delegate

Để biết thông tin tổng quát hơn về sự khác biệt giữa các chức năng này, xem bài viết này (Tôi đã đọc nó để kiểm tra nó cho chính xác và đó là quyền-on): http://www.elijahmanor.com/2012/02/differences-between-jquery-bind-vs-live.html

+0

Cảm ơn các tài nguyên. Điều đó thật tuyệt. Tôi có một câu hỏi khác có liên quan. Giả sử trang chủ của tôi có trình chiếu.Tôi có nên gọi mã trình chiếu trong hàm 'pageinit' hoặc 'pageshow' không? – cusejuice

+1

'pageshow' sẽ kích hoạt mỗi lần người dùng xem trang tiếp theo. Ví dụ: nó sẽ kích hoạt khi bạn xem trang chủ lần đầu tiên, nhưng nó cũng sẽ kích hoạt khi bạn điều hướng đi và sau đó quay lại trang chủ. Tôi sẽ thiết lập trình chiếu trong trình xử lý sự kiện 'pageinit' nhưng sau đó dừng nó trong trình xử lý sự kiện' pagehide' và khởi động nó trong trình xử lý sự kiện 'pageshow'. Điều này sẽ làm việc cho tải ban đầu vì sự kiện 'pageshow' kích hoạt sau sự kiện' pageinit'. – Jasper

+0

Nếu tôi cài đặt trình chiếu (tức là chạy một hàm để bắt đầu trình chiếu) trong BOTH của trình xử lý sự kiện 'pageinit' và' pageshow', nó sẽ không gọi hàm đó hai lần? – cusejuice

0

Đây là một mô tả tuyệt vời: http://jquerybyexample.blogspot.com/2010/08/bind-vs-live-vs-delegate-function.html

Nhưng câu trả lời ngắn gọn là nếu bạn đang sử dụng jquery 1.7, có lẽ bạn nên bắt đầu sử dụng các API mới trên() thay vì bất kỳ trong số này: http://api.jquery.com/on/

+0

Bài viết đó thực sự khó hiểu. Ví dụ, '.live()' không liên kết với các phần tử bạn đang nhắm mục tiêu (bao giờ), nó liên kết với phần tử 'document' (luôn luôn) và kiểm tra các sự kiện bubbling cho phần tử đích để xem nó có khớp với lựa chọn không bạn đã chuyển vào '.live()'. Ngoài ra, '.live()' có thể được sử dụng trong chuỗi, nhưng tác giả sử dụng một ví dụ ngu ngốc để hiển thị ngược lại. Vui lòng không sử dụng bài viết này làm cơ sở cho thông tin của bạn về các chức năng này. – Jasper

+1

Hãy thử bài viết này, nó tốt hơn nhiều: http://www.elijahmanor.com/2012/02/differences-between-jquery-bind-vs-live.html – Jasper

0

Tôi đã có cùng một câu hỏi này vào ngày khác và thấy rằng bài viết này cung cấp một phân tích rõ ràng trên mỗi.

http://jquerybyexample.blogspot.com/2010/08/bind-vs-live-vs-delegate-function.html

+0

Bài viết này có đầy đủ các báo cáo không hợp lệ, xem bình luận của tôi về câu trả lời của Julie Sheffield. – Jasper

+0

Hãy thử bài viết này, nó thực sự là một tốt: http://www.elijahmanor.com/2012/02/differences-between-jquery-bind-vs-live.html – Jasper