2009-05-02 41 views
17

Tôi mới sử dụng JQuery, vì vậy hãy mang theo tôi :).jquery không thấy các thành phần mới

Tôi có một vấn đề đơn giản:

$(document).ready(function() { 

    $("#instrument").change(function() { 
     $("#tunings").html("<select id=\"TuningSelector>\"[..]</div>"); 
    }); 

    $("#TuningSelector").change(function() { 
     DoSomethingWithTheValue(); 
     }); 

}); 

Vấn đề là: Khi cụ đã thay đổi, kịch bản không đáp ứng với những thay đổi nữa TuningSelector. Giống như JQuery không thấy phần tử TuningSelector mới ...

Tôi có cần gọi lại làm mới trên JQuery hay không? Để nó thấy DOM được làm mới?

Trả lời

36

Nói chung bạn muốn sử dụng on để nó áp dụng trình xử lý cho các phần tử mới khớp với công cụ chọn và ủy quyền cho phần tử cao hơn trong DOM.

$('body').on('change', '#control', function() { 
    DoSomething(); 
}); 
+4

.live ("thay đổi") sẽ không được triển khai cho đến khi jQuery 1.4 http://docs.jquery.com/JQuery_1.4_Roadmap#Events –

+1

@Sam - cảm ơn vì đã chỉ ra điều đó. Tôi đã không sử dụng nó với một lựa chọn như được nêu ra và không nhận ra rằng không có trong danh sách hỗ trợ. Câu trả lời của tôi đã được cập nhật để phản ánh điều này. – tvanfosson

+0

cho bất kỳ ai đọc điều này, .live() không được dùng để ủng hộ .on() –

2

Với sự kiện jQuery nếu bạn muốn sự kiện này để áp dụng cho các yếu tố mới, bạn sẽ sử dụng phương pháp .live, tuy nhiên jQuery 1.3 không hỗ trợ làm mờ, lấy nét, mouseenter, MouseLeave, thay đổi, trình sự kiện như các sự kiện trực tiếp. (thay đổi, gửi và làm mờ/lấy nét nằm trên roadmap cho jQuery 1.4)

Thay vào đó, bạn có thể sử dụng plugin liveQuery.

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