2011-01-20 31 views
11

Tôi muốn tất cả nội dung được tải AJAX trong ứng dụng của mình được đánh giá bằng tập lệnh JQuery của ứng dụng của tôi, giống như nội dung được tải bình thường. ví dụ. JQuery quét qua nạp nội dung AJAX cho selectors, như 'modal hộp liên kết' vvChạy lại ứng dụng Javascript trên nội dung tải ajax

Tất cả JavaScript của tôi là trong document.ready bình thường, trong đó hoạt động tốt cho HTTP nạp trang bình thường:

$(document).ready(function(){ 
    // my apps javascript 
}); 

tôi muốn sử dụng một cái gì đó như .ajaxComplete để kích hoạt lại mọi thứ chứa trong document.ready để đánh giá nội dung AJAX mới được tải cho bộ chọn jquery.

$(document).ajaxComplete(function(){ 
    // Re-run all my apps javascript 
}) 

Có một số mã tôi có thể đưa vào .ajaxComplete để làm điều này không?

Hy vọng điều này có ý nghĩa, vui lòng cho tôi biết nếu không, và tôi sẽ chỉnh sửa chi tiết câu hỏi.

+0

Bạn có thể giải thích thêm về những gì bạn đang tìm kiếm không? Tôi cảm thấy câu trả lời của tôi vẫn còn thiếu thứ gì đó, và tôi muốn chắc chắn rằng bạn tìm thấy câu trả lời mà bạn tìm kiếm. – jmort253

+0

@ jmort253 - Cảm ơn sự giúp đỡ của bạn, câu trả lời của thợ săn là khá nhiều những gì tôi đang tìm hiểu. –

Trả lời

12

bạn có thể đóng gói tất cả mọi thứ trong document.ready của bạn thành một chức năng và chỉ cần gọi hàm đó một lần nữa để lại ràng buộc

hoặc ...

một cách tiếp cận tốt hơn là nên tận dụng lợi thế của live()delegate() jQuery các phương thức để tất cả các phần tử hiện tại và tương lai khớp với các bộ chọn đó cũng sẽ bị ràng buộc với các sự kiện này.

ví dụ sử dụng live(): http://api.jquery.com/live/

$('.clickme').live('click', function() { 
    //all elements that exist now and elements added later 
    //with this class have this click event attached 
}); 

ví dụ sử dụng delegate(): http://api.jquery.com/delegate/

$("table").delegate("td", "hover", function(){ 
    //all current and future td elements in all current tables 
    //have this hover event attached 
}); 
+0

Cảm ơn thợ săn, điều này đặt tôi vào con đường bên phải. –

+2

Kể từ jQuery 1.7, phương thức .live() không được chấp nhận. Sử dụng .on() để đính kèm trình xử lý sự kiện. Người dùng các phiên bản cũ hơn của jQuery nên sử dụng .delegate() trong tùy chọn .live(). – Nazariy

1

Những gì bạn cần làm là xác định mã của bạn trong một hàm thay vì nặc danh. Các hàm ẩn danh không thể tái sử dụng được, nhưng nếu bạn viết một hàm, thì hàm đó có thể bị ràng buộc với nhiều sự kiện.

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