2009-08-10 17 views
2

Ja, ich weiß, es funktioniert nicht in IE und die Verwendung von 'klicken' funktioniert. Aber hier ist mein Problem.jquery 'ändern' Ereignis funktioniert nicht in IE

Ich habe zwei Auswahlfelder - Land und Stadt. Wenn Sie ein Land auswählen, wird das Stadtauswahlfeld ausgefüllt (und eine Google Map aktualisiert).

Der folgende Code funktioniert wie ein Charme in IE und Opera:

if (jQuery('#city').length > 0) { 
    jQuery('#city').change(function(){ populateCityListBox(); }); 
    } 

Wenn ich ‚klicken‘ anstelle von ‚change‘ verwenden, dann ist die populateCityListBox() wird einmal ausgelöst, wenn ich die Auswahlbox Pfeil klicken und noch einmal, wenn ich auf das Listenelement klicke.

Wie kann ich diese doppelte Auslösung vermeiden?

Antwort

2

Das Problem ist die Tatsache, dass IE das Änderungsereignis nicht auslöst, bis das Element den Fokus verliert.

Eine einfache Lösung könnte darin bestehen, den letzten Wert der Auswahl zu verfolgen und die Ausführung der Funktion nur zuzulassen, wenn sie anders ist.

Auch nur eine Randnotiz, in Ihrem Callback, müssen Sie es nicht in eine anonyme Funktion wickeln, wenn alles, was Sie tun, es anruft.

jQuery('#city').change(populateCityListBox); 

funktioniert genauso wie das, was Sie dort haben.

+0

Ich habe eine Auswahl, die gerade mit .change in IE8 und IE7 (Compat) funktioniert ohne Fokus zu verlieren. – Marc

+0

Mark: Können Sie uns den Code geben? – Steven

+0

@Steven, es gibt keine Magie $ ("# ID-Selektor"). Ändern (Funktion); wie gesagt von TM – Marc

0

dies funktionieren könnte (allerdings nicht getestet):

if ($.browser.msie) { 
    var interval = 50; 
    var changeHack = 'change-hac'; 
    var select = $("#viewByOrg"); 
    select.data(changeHack) = select.val(); 
    var checkVal=function() { 
    var oldVal = select.data(changeHack); 
    var newVal = select.val(); 
    if (oldVal !== newVal) { 
     select.data(changeHack, newVal); 
     select.trigger('change') 
    } 
    setTimeout(changeHack, interval); 
    } 
    setTimeout(changeHack, interval); 
} 

Spiel mit dem Intervall Ihre Gefühle Hotel. auch - wenn der Trigger ('ändern') Trick wird nicht funktionieren, versuchen Sie Ihre Onchange-Methode dort direkt

Verwandte Themen