2009-09-20 15 views
16

Il codice qui sotto funziona come previsto in FF, ma non in IE ...jQuery dal vivo, cambiamento non funziona in 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

Avete tentato di dedurre che cosa sta causando il problema, almeno? – strager

+0

questo è ciò che non funziona? –

risposta

24

$.live() non supporta l'evento change:

Attualmente non supportato: sfocatura, messa a fuoco, MouseEnter, mouseLeave, cambiamento, presentare http://docs.jquery.com/Events/live

Provare a utilizzare livequery?

+2

Perfetto! Grazie mille! livequery fa il trucco! –

+0

Ran in questo esatto problema e anche leggere i documenti e perse la non-support-ness. – wesgarrison

+1

Volevo solo pubblicare un aggiornamento a questo. Innanzitutto, ho notato che l'URL che hai pubblicato reindirizza ora a http://api.jquery.com/live/. In secondo luogo, il passaggio che hai citato riguardo all'evento di cambiamento "attualmente non supportato" non è più disponibile in questa pagina, poiché sembra che I.E. il supporto ora funziona con jquery 1.4.2. Mi ero appena imbattuto in questo stesso problema su una pagina che utilizzava la 1.3.2, l'ho aggiornato alla 1.4.2 e ora funziona come un incantesimo. Grazie! – Funka

3

Nota: jQuery 1.4 ora supporta la funzione live per tutti gli eventi normali. Fino a poco tempo fa non funzionava con IE8, ma credo che sia stato risolto con jQuery 1.4.2. Vedere questo biglietto risolto jQuery: IE8 DOES NOT SUPPORT THE CHANGE EVENT WHILE USING LIVE

+2

Scusate, votando questa risposta perché la domanda menzionata IE6 e IE7 (non IE8) e ancora non funziona in IE6 con jQuery 1.4.2 perché IE6 non bolla l'evento change. Giusto per evitare che la gente pensi che questo è risolto. –

+0

@Bernhard Il tuo commento mi ha appena salvato 2 ore di lavoro –

2

ho usato -

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

Usa delegate() funzione invece live(). È lo stesso del live, ma supporta più eventi e funziona bene in IE. Nel caso in cui yout sarà

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

e corrispondente undelegate() funzione

2

Si noti inoltre che a partire dal jQuery 1.7 si dovrebbe usare "on" al posto di delegato o dal vivo.

$(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+ 

soffre in diretta da un gruppo più problemi che solo la vecchia questione "nessun cambiamento evento": http://api.jquery.com/live/#typefn