Tôi có một tình huống mà tại một thời điểm nội dung html của một div được thay đổi thành cái gì khác, và sau đó được thay đổi trở lại. Một số điều khiển jquery ui là không đúng. Tôi đã giảm vấn đề xuống đoạn mã sau, về cơ bản cho thấy trình xử lý sự kiện được liên kết với nút không kích hoạt nữa. Tôi giả định rằng đây là rác được thu thập tại một số thời điểm khi họ đã đi. Vì vậy, câu hỏi của tôi là -javascript sự kiện bị thiếu sau khi đặt lại html
Làm cách nào để ngăn trình xử lý sự kiện bị thu thập rác khi thiếu từ DOM?
Tôi hiểu rằng tôi chỉ có thể gán lại chức năng click()
, nhưng vì tôi đang sử dụng thư viện bên ngoài (jquery ui), tôi thực sự không biết nó làm gì với các điều khiển của tôi. Tôi chỉ muốn các sự kiện của họ được phục hồi như trước đây.
<div id="container">
<p>This container has a button, which will forget its click()...</p>
<input id="testbutton" type="button" value="Click Me!"/>
</div>
<script type="text/javascript">
$(function(){
$("#testbutton").click(
function(){
alert("Button has been clicked!");
})
});
</script>
<div>
<p>... when this button reseats html</p>
<input id="actionbutton" type="button" value="Toggle"/>
</div>
<script type="text/javascript">
var toggle = false;
var html;
$(function(){
$("#actionbutton").click(
function(){
toggle = !toggle;
if(toggle){
html = $("#container").html();
$("#container").html("");
} else $("#container").html(html);
})
});
</script>
jfiddle minh họa sự cố tôi đang gặp phải.
Và thay thế là không ghi đè lên html trong vùng chứa, nhưng thay vào đó, hãy sử dụng phương pháp tách để loại bỏ và sau đó thêm nó trở lại dom - http://jsfiddle.net/8S5E4/4/. Không có vẻ như đây là những gì bạn muốn mặc dù (dựa trên các ý kiến trong fiddle) –