2011-11-06 22 views
21

Phương thức .on().off() của jQuery 1.7 phải thay thế .live() và các phương thức như vậy.Phương thức jQuery 1.7 on() và off() cho các phần tử động

Tôi đã thử nó với một mục động:

$(".myList").on('click', function(e){ 
    alert('hello world'); 
}); 

này không làm việc cho tôi cho các yếu tố thêm vào sau khi DOM được nạp.

Mã trên một ví dụ hợp lệ cho các phương pháp .on().off() của jQuery 1.7 chưa?

Trả lời

33

Xem http://blog.jquery.com/2011/11/03/jquery-1-7-released/ cho live() -> on/off() (và các ví dụ khác).

Đây là tấm gương của họ để chuyển đổi trực tiếp cho trên:

$('a').live('click', fn); 
$(document).on('click', 'a', fn); 

Vì vậy, ví dụ bạn trở nên to:

$(document).on('click', '.myList', function(e){ 
    alert('hello world'); 
}); 
+4

cái gì đó để nhận ra mặc dù. on() không hoạt động với các phần tử được tạo động được nối vào cơ thể VÀ có chỉ số z âm. Vì lý do gì đó, nhấp chuột không bao giờ di chuyển qua phần tử chứa nội dung. Thẻ body sẽ tiếp tục thu hút tất cả các nhấp chuột. Ngay cả khi bạn làm cho cơ thể chỉ số z thấp hơn phần tử được thêm vào DOM. BAO GIỜ sống() KHÔNG có quyền nhắm mục tiêu các mục được lập chỉ mục phủ định này mặc dù on() không thể. – Alex

+1

@Alex tại sao bạn cần phải tạo động các yếu tố có chỉ số z âm? – Omu

+1

và quan trọng nhất là jQuery phiên bản 1.9.0 - phương thức live() không còn khả dụng nữa. –

4

Dưới đây là một ví dụ nhỏ:

http://jsfiddle.net/zzSjK/

<script type="text/javascript"> 
    $(function(){ 
     $(document).on('click','.clickme' , function(e){ 
      addtext() 
     }); 
     function addtext() { 
      $('.myList').append('<div class="clickme">click me</div>') 
     } 
    }) 
</script> 

<div class="myList"> 
    <div class="clickme">-click-</div> 
</div> 
2

"Ràng buộc" với:

$(document).on('click','.myDiv',function(){ ... }); 

Và "unbind" với:

$(document).off('click','.myDiv'); 
+0

bị bỏ qua do tai nạn. lấy làm tiếc :( –

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