2010-06-12 19 views
11

Tengo una lista de elementos que tienen asociados algunos botones jQueryUI. Después de una acción (borrar un elemento), quiero volver a cargar la lista a través de ajax.Agregar botones jQueryui a contenido agregado dinámicamente

El único problema es cuando lo hago, los botones JQueryUI ya no se muestran, solo el marcado estándar.

Sé que puedo usar jQuery.live() para agregar dinámicamente manejadores de clics, etc., pero ¿cómo puedo aplicar un jQueryUI button() a ellos?

Respuesta

12

Al volver a cargar a través de AJAX, llame .button() (o cualquier variante que está utilizando) en la que context, así:

$.ajax({ 
    //other options.. 
    success: function(data) { 
    //insert elements 
    $(".button", data).button(); 
    } 
}); 

Esto ejecutará .button() en los elementos solo en la respuesta (no los otros ya están en la página/DOM en otro lugar) con class="button".

realmente no se puede utilizar .live() ni nada de eso aquí, que se basa en que burbujea caso, no es realmente nada que ver con la adición/eliminación de elementos ... cuando se trata de los plugins que necesita que ejecutar de nuevo en contra de la nuevos elementos que agregas O bien, el método menos eficiente pero más genérico sería el .livequery() plugin, que se utiliza como esto:

$(".button").livequery(function() { 
    $(this).button(); 
}); 

Como ya he dicho, sin embargo, no es lo más eficiente del mundo, ya que en realidad controla el DOM para los cambios en diversos formas.

+0

Enfriar gracias. Entonces, la respuesta corta es: no se puede, a menos que use el plugin livequery. Podría verificarlo de todos modos, pero considero su punto de eficacia si así es como funciona. Sin embargo, la información útil sobre los métodos de llamada en contexto - Creo que mi principal preocupación era evitar volver a ejecutar .button() en todos los elementos de la página, que usted respondió. – Hippyjim

+0

Como nota al margen de esta respuesta, tuve que revertir el orden para la "actualización", donde es $ (". Button", data) .button(), tuve que hacer $ (datos, ".button"). botón(), solo en caso de que alguien más lo intente y no esté funcionando. – MatRichard

0

Se puede volver a unirse con el controlador de eventos:

$("#mybutton").unbind().click(function(){ ..do..something... }); 
+1

Gracias, pero no es solo el controlador de eventos, jqueryui agrega etiquetas y otras cosas para cada botón. de lo contrario, podría usar Live para el manejador de clics. Estoy tratando de evitar usar JS de devolución de llamada en la parte superior de jQuery.load() si es posible. – Hippyjim

Cuestiones relacionadas