2010-10-01 5 views
7

Tengo el siguiente códigoCómo usar el evento de alternar con directo?

$(".reply").toggle 
(
    function() 
    { 
     x1(); 
    }, 
    function() 
    { 
     x2(); 
    } 
); 

necesito utilizar live, por lo que los nuevos elementos también estarían obligados. ¿Hay alguna sintaxis para hacerlo? ¿O tendré que implementar un toggle en el evento click?

Estoy usando jQuery 1.4.2.

+1

Revisa http://stackoverflow.com/questions/2172614/using-jquery-live-with-toggle-event – Alec

+0

pregunta duplicada! –

Respuesta

13

acaba de modificar la respuesta de fehay de modo que no se basa en jQuery no conectar los controladores de eventos duplicados durante toggle()

$(".reply").live('click', function() { 
    var toggled = $(this).data('toggled'); 
    $(this).data('toggled', !toggled); 
    if (!toggled) { 
     x1(); 
    } 
    else { 
     x2(); 
    } 
}); 

Además, sólo tener en cuenta que los selectores para live tienen que ser lo más específico posible debido a la forma la delegación de eventos funciona. Cada vez que se hace clic en algo en el documento, jQuery tiene que trepar por el árbol para comprobar si el elemento coincide con el selector. Por la misma razón, .delegate() es mucho más eficaz porque puede limitar el área de captura.

+0

Lo tomaré como un NO. – BrunoLM

+0

¡Gracias, esto funciona sin defectos! – Plippie

3

Live soporta eventos personalizados en jquery 1.4. Usted podría intentar algo como esto:

$(function() { 
    $(".reply").live("customToggle", function() { 
     $(this).toggle(
      function() { 
       x1(); 
      }, 
      function() { 
       x2(); 
      } 
     ); 
    }); 

    $(".reply").live('click', function() { 
     $(this).trigger('customToggle'); 
    }); 
}); 

esto parece funcionar bien sin un evento personalizado:

$(".reply").live('click', function() { 
    $(this).toggle(
      function() { 
       x1(); 
      }, 
      function() { 
       x2(); 
      } 
     ); 
    $(this).trigger('click'); 
}); 
+0

+1 buena manera de hacerlo :) – Sarfraz

+1

No me parece una buena manera. ¿Está adjuntando controladores de eventos cada vez que hace clic en él? –

+0

Sí, eso tampoco me pareció tan bueno. +1 por tu respuesta. Me gusta más. Creo que un simple clic en vivo y tu propio alternar es la forma "correcta" de hacerlo. – fehays

Cuestiones relacionadas