2009-09-20 19 views
16

El siguiente código funciona como se espera en FF, pero no en IE ...jQuery en vivo, en cambio no funciona en IE6, IE7

$(document).ready(function() { 

    $('div.facet_dropdown select').live('change', function() { 
     var changed_facet = $(this).attr('id'); 
     var facets = $('select', $(this).closest('form')); 
     var args = window.location.href.split('?')[0] + '?ajax=1'; 
     var clear = false; 
     for(var i = 0; i < facets.length; i++) { 
      var ob = $(facets[i]); 
      var val = ob.val(); 
      if(clear) { 
       val = ''; 
      } 
      args += '&' + ob.attr('id') + '=' + val; 
      if(ob.attr('id') == changed_facet) { 
       clear = true; 
      } 
     } 

     $.getJSON(args, function(json) { 
      for(widget_id in json) { 
       var sel = '#field-' + widget_id + ' div.widget'; 
       $(sel).html(json[widget_id]); 
      } 
     }); 

    }); 

}); 
+0

¿Usted ha intentado deducir lo que está causando el problema, al menos? – strager

+0

eso es lo que no funciona? –

Respuesta

24

$.live() no admite el evento change:

Actualmente no es compatible: mancha, foco, MouseEnter, mouseleave, cambio, presentar http://docs.jquery.com/Events/live

¿Intenta usar livequery en su lugar?

+2

¡Perfecto! ¡Muchas gracias! ¡livequery hace el truco! –

+0

Se encontró con este problema exacto e incluso leyó los documentos y omitió la falta de compatibilidad. – wesgarrison

+1

Solo quería publicar una actualización de esto. Primero, noté que la URL que publica ahora está redireccionando a http://api.jquery.com/live/. En segundo lugar, el pasaje que citó sobre el evento de cambio que "actualmente no es compatible" ya no se encuentra en esta página, ya que parece que I.E. el soporte ahora funciona en jquery 1.4.2. Me acaba de encontrar con el mismo problema en una página usando 1.3.2, lo actualicé a 1.4.2, y ahora funciona como un hechizo. ¡Gracias! – Funka

3

Nota: jQuery 1.4 ahora es compatible con la función en vivo para todos los eventos normales. No funcionó con IE8 hasta hace poco, pero creo que esto se soluciona con jQuery 1.4.2. Ver este billete jQuery resuelto: IE8 DOES NOT SUPPORT THE CHANGE EVENT WHILE USING LIVE

+2

Lo siento, votar esta respuesta porque la pregunta mencionó IE6 e IE7 (no IE8) y todavía no funciona en IE6 con jQuery 1.4.2 porque IE6 no hace burbujas en el evento de cambio. Solo para evitar que la gente piense que esto está resuelto. –

+0

@Bernhard Tu comentario me salvó 2 horas de trabajo –

2

I Used -

jQuery('#id').find('select').live("click", function(){ 
    jQuery(this).change(function(){ 
    //your code 
    }); 
}); 
2

Uso delegate() función en lugar live(). Es lo mismo que en vivo, pero admite más eventos y funciona bien en IE. En caso de yout será

$('div.facet_dropdown select').delegate('change', function() { ... }); 

y corresponsal undelegate() la función

2

También tenga en cuenta que a partir de jQuery 1.7 se debe utilizar "en" lugar de delegado o vivir.

$(selector).live(events, data, handler);    // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler);  // jQuery 1.7+ 

sufre en directo de un montón más problemas que sólo el viejo problema de "ningún cambio evento": http://api.jquery.com/live/#typefn