Tengo una situación en la que en un momento los contenidos html de un div se cambian a otra cosa, y luego se cambian de nuevo. Algunos de los controles de jquery ui se están comportando mal. Reduje el problema al siguiente fragmento, que básicamente muestra que el controlador de eventos asociado con el botón ya no se dispara. Supongo que fueron basura recolectada en algún momento cuando ya no estaban. Entonces mi pregunta es:javascript event missing after html reset
¿Cómo evito que los manejadores de eventos sean basura recolectada cuando faltan desde el DOM?
Entiendo que podría reasignar la función click()
, pero como estoy usando una biblioteca externa (jquery ui), realmente no sé qué está haciendo con mis controles. Solo quiero que sus eventos sean restaurados como lo fueron antes.
<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>
Este jfiddle demuestra el problema que estoy teniendo.
Y la alternativa es no sobrescribir el html en el contenedor, sino usar el método de separación para eliminarlo y luego agregarlo de nuevo al dom - http://jsfiddle.net/8S5E4/4/. Sin embargo, parece que esto no es lo que usted quería (basado en los comentarios del violín) –