2011-12-12 29 views
23

Tôi biết rằng .live() hiện không được chấp nhận nhưng dường như tôi không thể thay đổi và giữ chức năng.Jquery .on so với .live

Tôi chỉ có một câu hỏi nhanh về hàm .on() trong jQuery. Tôi hiện đang sử dụng .live()here

Giống như vậy:

$('table tr th').live("click", function() { 
}); 

Tuy nhiên, khi tôi cố gắng và thay thế .live() với .on() nó không còn hoạt động vì nó là nghĩa vụ phải.

tôi đã cố gắng đưa vào

$('table tr th').on("click", function() { 
}); 

cũng như

$('table tr').live("click", "th", function() { 
}); 

$('table tr').delegate("th", "click", function() { 
}); 

nhưng vô ích.

Tại sao điều này và tôi có thể thực hiện các bước nào để hoạt động chính xác?

+1

thể trùng lặp của [jQuery 1.7 - Biến live() vào ngày()] (http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live- vào-on) –

+0

@FelixKling Tôi đang cố gắng tránh sử dụng '$ (tài liệu)' để bắt chước cuộc gọi một cách chính xác.Tôi đã tự hỏi nếu có một cách khác để làm điều đó đó là phù hợp hơn với các ví dụ trên trang web API jQuery. –

+0

Đơn giản chỉ cần mất gần nhất hiện có yếu tố (tổ tiên) (trong đó hơn sẽ tương ứng với '.delegate' sau đó). –

Trả lời

31

Các on() chức năng đòi hỏi một bản cập nhật cú pháp, bạn nên thay đổi mã của bạn để:

$('body').on("click", "table tr th", function()... 

Kiểm tra bài viết này cho biết thêm: http://www.andismith.com/blog/2011/11/on-and-off/

+0

Rất đúng, tôi sẽ cập nhật ngữ cảnh. –

0

Tôi bằng cách nào đó đoán rằng bạn đang thêm tr phần tử vào bảng của mình, chứ không phải th.

$('table').on("click", "tr th", function(){}); 
+0

Lệnh '' s được tạo ra từ một mảng và ghi vào người đầu tiên '' của bảng. giải pháp của bạn không hoạt động mặc dù ... –

+0

Điều đó sẽ không làm việc, bàn của anh được thay thế sử dụng '.replaceWith()' –

9

Hãy thử điều này:

$('table tr th').live("click", function() { 

nên

$(document).on("click", "table tr th", function() { 

Đó là cách bạn sẽ bắt chước các .live gọi chính xác. Tất nhiên bạn có thể giới hạn bộ chọn của bạn từ tài liệu đến một cái gì đó có ý nghĩa hơn dựa trên cấu trúc DOM của bạn.

Edit:

Chỉ cần làm rõ, trong ví dụ của bạn, bạn được yêu cầu phải sử dụng $(document).on(... vì bảng không có bất kỳ bậc cha mẹ và được thay thế trong suốt cuộc đời của trang của bạn.

+0

Vì vậy, vì tôi thay thế bảng trong mã tôi cần phải sử dụng '$ (document)' để rằng cuộc gọi vẫn tiếp tục hoạt động trong suốt? –

+0

@ Andrew: Không, bất kỳ yếu tố tồn tại trong hệ thống cấp bậc sẽ làm. –

+0

@FelixKling Ah okay, cảm ơn bạn! –

2

Đảm bảo rằng các yếu tố được lựa chọn (thứ/tr) tồn tại khi trang được tải ban đầu. Mới .on sẽ không hoạt động nếu bộ chọn này được thêm sau vào DOM.

Hãy thử

$('body').on('click', 'thesSelectorForYourTriggerElement', function(){ 
    //callback 
}); 
Các vấn đề liên quan