Tôi đã ấn tượng rằng trình xử lý sự kiện on
của jQuery có nghĩa là có thể 'lắng nghe' cho các phần tử được tạo động và được cho là thay thế hành vi của live
. Tuy nhiên, những gì tôi đã trải nghiệm là sử dụng on
không chụp sự kiện nhấp trong khi sử dụng live
là thành công!jQuery 'on' không được đăng ký ở chế độ bật động được tạo động
Khía cạnh khó khăn trong hoàn cảnh của tôi là tôi không chỉ tạo nội dung động mà tôi đang thực hiện thông qua cuộc gọi AJAX .get()
và chèn HTML kết quả vào một cửa sổ bật lên jQueryUI phương thức .dialog()
.
Đây là một phiên bản đơn giản của những gì tôi đã cố gắng để hoàn thành (bọc trong $(document).ready(...)
):
$.get("getUserDataAjax.php", queryString, function(formToDisplay) {
$("#dialog").dialog({
autoOpen: true,
modal: true,
buttons...
}).html(formToDisplay);
});
$(".classThatExistsInFormToDisplay").on("click", function() {
alert("This doesn't get called");
});
Từ tài liệu cho on
Tôi thấy điều này mà đó là làm thế nào tôi đã được tiếp cận văn bản sự kiện on
tôi:
$("p").on("click", function(){
alert($(this).text());
});
Tuy nhiên, vì lý do nào đó, live
sẽ hoạt động như tôi mong đợi - trong khi on
không hoạt động.
Đây không phải là một câu hỏi cho "làm thế nào tôi có thể làm cho nó hoạt động" bởi vì tôi đã phát hiện ra rằng on
sẽ thành công (nhấp chuột chụp) nếu tôi tuyên bố nó bên các function(formToDisplay)
gọi lại.
Câu hỏi của tôi là: điều gì sai với on
rằng không tìm thấy các phần tử được tạo động của tôi trong cửa sổ bật lên phương thức? Ví dụ jQuery của tôi là jquery-1.7.2. jQueryUI là 1.8.21.
Dưới đây là hai câu hỏi jsFiddles gần đúng vấn đề. Nhấp vào từ "Kiểm tra" trong cả hai trường hợp để xem hành vi khác nhau. Sự khác biệt duy nhất trong mã đang thay thế on
cho live
.
Nơi the click bị bắt bởi live
.
Trường hợp the click KHÔNG bị bắt bởi on
(nhấp vào 'Kiểm tra - nhấp vào tôi' để xem không có gì xảy ra).
Tôi nhận ra tôi chỉ có thể được sử dụng on
không thích hợp hoặc yêu cầu nó để làm một cái gì đó mà không được dự định nhưng tôi muốn biết tại sao nó không làm việc (nhưng nếu bạn có một cái gì đó khủng khiếp thông minh, cảm thấy tự do để chia sẻ). Cảm ơn sự khôn ngoan của bạn!
Cập nhật/trả lời/Giải pháp:
Theo người sử dụng 'undefined', sự khác biệt là on
không được ủy thác tất cả các cách từ đỉnh của đối tượng document
trong khi live
does/là.
Như Claudio đề cập, có những phần của tài liệu on
mà tham khảo các yếu tố động tạo và những gì bạn đưa vào $("")
phần của truy vấn cần phải tồn tại trong thời gian chạy. Đây là giải pháp mới của tôi: Ghi lại các sự kiện nhấp chuột on
hộp thoại phương thức của tôi, mặc dù nó không có bất kỳ nội dung nào khi sự kiện được tạo trong thời gian chạy, sẽ có thể tìm thấy nội dung và phần tử của tôi với lớp đặc biệt được tạo một lát sau.
$("#dialog").on("click", ".classThatExistsInFormToDisplay", function() {
... //(success! Event captured)
});
Cảm ơn rất nhiều!
Hấp dẫn! Tôi thấy rằng đề xuất của bạn đã thành công. Lớn thế nào! Tôi đính kèm sự kiện 'on' vào hộp thoại Modal và sau đó giới hạn các nhấp chuột vào lớp mà tôi muốn thực sự chú ý đến. Trong khi điều này sẽ được kích hoạt nhiều hơn so với chỉ chụp trên lớp học của tôi (một giả định) điều này có vẻ như một giải pháp tuyệt vời.Cảm ơn câu trả lời của bạn! – veeTrain
@veeTrain Bạn được hoan nghênh. – undefined
Bạn là người tiết kiệm cuộc sống, thưa bạn! Cảm ơn bạn. – Agent007