estoy usando $(".button").on("click", function(){ });
para hacer clic en un botón que está en un contenedor, pero luego se realiza una llamada ajax y el contenido se actualiza con cosas nuevas y luego, cuando intento hacer clic .button
, no funcionará ... no se devolverá nada cuando haga clic en el botón.
Incluso lo intenté
$(".button").live("click", function(){ });
o
$(".button").click(function(){ });
¿Cómo puedo hacer que funcione?
EDITAR: mi html:
<div class="container">
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
<input type="button" value="reload" class="button" />
</div>
live
se supone que debe manejar, por lo que es extraño que eso no funcione.Respuestas:
Debe hacerse de esta manera.
$('body').on('click', '.button', function (){ alert('click!'); });
Si tiene un contenedor que no cambia durante la solicitud ajax, este es más eficaz:
$('.container').on('click', '.button', function (){ alert('click!'); });
Vincule siempre el evento delegado al elemento estático más cercano que contendrá los elementos dinámicos.
fuente
Ok, resolví mi problema usando la función .on () correctamente ya que me faltaba un parámetro.
en vez de
$(".button").on("click", function() { } );
solía
$(".container").on("click", ".button", function() { } );
fuente
En vez de:
$(".button").on("click", function() { } );
Solía:
$(".container").on("click", ".button", function() { } );
He usado esto y funcionó.
fuente
¿Es esto lo que estás intentando hacer? Tenga en cuenta que estoy colocando el
$.on()
en el padre, pero seleccionando el.button
para la acción.http://api.jquery.com/on/
<div id="stuff"> <button class="button">Click me!</button> <p>Stuff</p> </div> var $stuff = $('#stuff'), ajaxContent = $stuff.html(); $stuff.on('click', '.button', function(){ $.get('/echo/html/', function(){ $stuff.empty(); console.log($stuff.html()); alert($stuff.html()); // Look behind, #stuff is empty. $stuff.html(ajaxContent); console.log($stuff.html()); }); });
http://jsfiddle.net/62uSU/1
Otra demostración:
var $stuff = $('#stuff'), ajaxContent = $stuff.html(), $ajaxContent, colors = ['blue','green','red'], color = 0; $stuff.on('click', '.button', function(){ $.get('/echo/html/', function(){ color++; if (color == colors.length) color = 0; console.log($stuff.html()); alert($stuff.html()); $ajaxContent = $(ajaxContent); $stuff.append($ajaxContent).css('color', colors[color]); console.log($stuff.html()); }); });
http://jsfiddle.net/62uSU/2/
fuente