2009-09-20 7 views
16

Le code ci-dessous fonctionne comme prévu dans FF, mais pas ... IEsjQuery en direct, changement ne fonctionne pas dans 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

Avez-vous essayé de déduire ce qui est à l'origine du problème au moins? – strager

+0

c'est ce qui ne fonctionne pas? –

Répondre

24

$.live() ne supporte pas l'événement change:

pas pris en charge: flou, mise au point, mouseenter, mouseleave, changement, soumettre http://docs.jquery.com/Events/live

Essayez plutôt d'utiliser livequery?

+2

Parfait! Merci beaucoup! livequery fait l'affaire! –

+0

Ran dans ce problème exact et même lire les documents et manqué le non-support-ness. – wesgarrison

+1

Je voulais juste poster une mise à jour à ce sujet. Tout d'abord, j'ai remarqué que l'URL que vous avez publiée redirige maintenant vers http://api.jquery.com/live/. Deuxièmement, le passage que vous avez cité concernant l'événement de changement étant "actuellement non pris en charge" ne se trouve plus sur cette page, car il semble que c'est I.E. le support fonctionne maintenant dans jquery 1.4.2. Je viens de rencontrer ce même problème sur une page en utilisant 1.3.2, l'ai mis à jour en 1.4.2, et ça fonctionne maintenant comme un charme. Merci! – Funka

3

Remarque: jQuery 1.4 prend désormais en charge la fonction live pour tous les événements normaux. Cela n'a pas fonctionné avec IE8 jusqu'à récemment, mais je crois que c'est corrigé avec jQuery 1.4.2. Voir ce billet résolu jQuery: IE8 DOES NOT SUPPORT THE CHANGE EVENT WHILE USING LIVE

+2

Désolé, votant vers le bas cette réponse parce que la question a mentionné IE6 et IE7 (pas IE8) et il ne fonctionne toujours pas dans IE6 avec jQuery 1.4.2 car IE6 ne bulle pas l'événement de changement. Juste pour éviter que les gens pensent que c'est résolu. –

+0

@Bernhard Votre commentaire vient de me sauver 2 heures de travail –

2

I utilisé -

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

Utilisez delegate() fonction à la place live(). C'est la même chose que vivre, mais prend en charge plus d'événements et fonctionne bien dans IE. Dans le cas yout il sera

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

et la fonction undelegate() correspondant

2

Notez également que de jQuery 1.7, vous devez utiliser « sur » au lieu de délégué ou de vivre.

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

souffre en direct d'un groupe plus de problèmes que la simple question ancienne « pas d'événement »: http://api.jquery.com/live/#typefn

Questions connexes