2010-02-28 3 views
5

Der Prototyp-Ereignis-Listener, den ich für Änderungen in ausgewählten Menüs verwende, wird in IE nicht ausgelöst.Event.observe "change" -Ereignisse werden im IE nicht ausgelöst

Event.observe('use_billing', 'change', Checkout.getBillingData); 

Dies funktioniert in Firefox (natürlich), aber nichts geschieht in IE (natürlich) - Ich habe seit einiger Zeit diese googeln, aber ich habe keine passende Lösung für dieses Problem gefunden. Ich habe gelesen, dass es Probleme gibt, aber ich habe nichts Nützliches gefunden, um das Problem zu umgehen und es zum Laufen zu bringen.

mir wirklich versucht, mit Inline-Ereignis-Triggern zu vermeiden, da sie für ein unordentliches Dokument fehleranfällig aufdringlicher und machen sind:

<select id='use_billing' onchange="Checkout.getBillingData();">....</select> 

Irgendwelche Ideen wären toll - das ist das einzige, was dieses Projekt zu stoppen von der Beta zur Produktion.

Antwort

2

Ich fand den Grund - es war nicht das Problem Fokus, es stellt sich heraus, dass ich den Namen des Formularelements und ID-Werte die gleiche hatte - Ich änderte den ID-Wert und alles hat gut funktioniert.

3

Dies ist ein häufiges Problem mit IE. Es löst keine Ereignisse aus, bis das Element den Fokus verliert.

Um zu überprüfen, dass dies in der Tat die Ursache Ihres Problems ist, versuchen Sie, das Menü zu ändern und dann die Tabulatortaste zu drücken, um den Fokus auf ein anderes Element zu verschieben. Wenn Ihr Rückruf ordnungsgemäß ausgelöst wird, wissen Sie, dass kein anderes Problem vorliegt.

Ich habe dieses Problem zuvor schon durch das Abhören anderer Ereignisse wie click oder keydown behoben. Sie können Ihrem Callback eine Überprüfung hinzufügen, um sicherzustellen, dass der Wert tatsächlich von dem Wert abweicht, um sicherzustellen, dass Sie das Ereignis nicht öfter als nötig verarbeiten (da andere Browser gleichzeitig click und change auslösen, wenn sie darauf klicken ein neuer Wert).

2

Ich weiß, das ist ein altes Thema, aber ich wollte eine alternative Antwort zu der oben genannten teilen. In meinem Code waren der Name und die ID des Elements identisch, aber das war egal.

In der Funktion, die ausgelöst wird, wurde das Ereignisargument vom Prototyp übergeben. Um den Wert des Textfeldes zu erhalten (das erhöht das Ereignis) in Firefox verwenden Sie eventArg.currentTarget.value

aber in IE müssen Sie eventArg.srcElement.value

So nutzen, um für sie in beiden Browsern arbeiten Sie verwenden müssen ...

var value = "";
var id = "";
if(eventArg.currentTarget){//FireFox
value = eventArg.currentTarget.value;
id = eventArg.currentTarget.id;
}
else{//IE
value = eventArg.srcElement.value;
id = eventArg.srcElement.id;
}