2010-12-19 21 views
8

Tengo esta función aquí:jQuery: el uso directo() con cada uno()

$("a.fancybox_vid").each(function(){ 
    $(this).fancybox({ 
    titleShow  : false, 
    width: 640, 
    height: 395, 
    autoDimensions: false, 
    overlayOpacity: 0.6, 
    href: "misc/mc.php?v="+$(this).attr('id') 
    }); 
}); 

Ahora un enlace con .fancybox_vid c lass consigue adjunta, y luego esto no va a funcionar. Solo si está allí desde el principio. ¿Cómo puedo tener live() en este cada().

Respuesta

4

Si desea "vivir-como" la funcionalidad de los métodos, se puede utilizar the livequery plugin:

$(function() { 
    $('a.fancybox').livequery(function() { 
     $(this).fancybox({ 
      titleShow  : false, 
      width: 640, 
      height: 395, 
      autoDimensions: false, 
      overlayOpacity: 0.6, 
      href: "misc/mc.php?v="+$(this).attr('id') 
     }); 
    }); 
}); 

... aunque sería mejor (menos sobrecarga) a sólo llamar el plugin fancybox en el recién creado elementos.

+0

el trabajo aún no ha livequery cualquiera . Llame el plugin FancyBox en los elementos de nueva creación, ¿qué quiere decir con esto? que en la materia anexa no debe haber este siga el jQuery $ ("a.fancybox_vid"). each (function() {? .. Gracias – Karem

+0

@Karem: más o menos. No sé cómo estás creando los nuevos elementos, pero necesitas llamar directamente a '.fancyBox()' en los nuevos elementos. Si haces '$ (" a.fancybox_vid ")' , en realidad está seleccionando * todos * los elementos coincidentes en la página, algunos de los cuales ya tienen 'fancyBox' aplicado a ellos. Si actualiza su pregunta a sh cómo se crean los nuevos elementos, me ayudaría a decirte cómo hacerlo. – user113716

+0

los nuevos elementos (video) está dentro de un bucle while() (PHP) y si se crean $ contenido contiene un enlace de vídeo de youtube. – Karem

0

esto no es posible, ya que live maneja sucesos. Fancybox solo crea eventos en la lista de elementos actual.

Yo creo que hay que aplicar el método .fancybox() cada vez que se crea un nuevo elemento.

+0

¿Qué quiere decir con esto? Que en el material adjunto no debe haber este siga el jQuery $ ("a.fancybox_vid"). Each (function() {..? – Karem

+0

Sí, pero no necesariamente tiene que iterar sobre cada elemento. FancyBox lo hace por . En que la última frase me trató de dejar en claro que se debe aplicar la FancyBox después de que un elemento se añade: '$ (elementos) .appendTo .fancybox (document.body)();', por ejemplo – Harmen

0

Lo que trata de hacer un evento en vivo, que llama a la FancyBox:

$("a.fancybox_vid:not(.fancy)").live('click', function(){ 
$(this).addClass('fancy').fancybox({ 
    titleShow  : false, 
    width: 640, 
    height: 395, 
    autoDimensions: false, 
    overlayOpacity: 0.6, 
    href: "misc/mc.php?v="+$(this).attr('id') 
}); 
}); 
Cuestiones relacionadas