2010-11-23 5 views
3

Ich habe eine Dropdown-Liste auf meiner Webseite mit einem jquery Ereignis an das Ereignis change. Bei Änderung verwende ich Ajax, um eine Teilansicht in einem Popup-Fenster zu laden.Wie verhindert man jquery Ereignis feuern auf einer Dropdown-Liste, wenn ein Ereignis beigefügt ist

Wenn der Benutzer die Tastatur verwendet, um durch die Liste der Elemente zu navigieren, aber dann auf einen Link auf einem anderen Teil der Seite klickt, sehe ich momentan mein Popup-Fenster. Dies passiert offensichtlich, wenn der Benutzer auf einen Link an einer anderen Stelle auf der Seite klickt, das Änderungsereignis wird zuerst in der Dropdown-Liste ausgelöst.

Gibt es saubere Lösungen, um dieses Problem zu lösen? Eine einfache Lösung wäre, das Ereignis mit keyup zu starten, aber ich möchte nicht, dass diese Funktionalität auftritt.

Hier ist das Änderungsereignis Code-Snippet

$('#lookup').change(function() 
{ 
    $.get(..//load template 

Antwort

0

Ich habe keine Lösung gefunden, die mir gefallen hat oder mit meinem Stil sauber gearbeitet hat, also habe ich beschlossen, Trigger sowohl bei den 'Change'- als auch' Keyup'-Events einzufangen, um dieses Szenario zu vermeiden.

0

Die Veranstaltung konnte nicht beendet werden, weil das Änderungsereignis in jedem Fall ausgelöst wird.

Eine Möglichkeit könnte sein, ein gewisses Zeitlimit zwischen dem Ereignis gefeuert und dem tatsächlichen Aufruf der $ .get-Methode zu setzen, um Ihren Fall zu berücksichtigen, aber sicherlich ist es keine elegante Lösung.

Andernfalls können Sie die Rückgabefunktion nur aufrufen, wenn ein bestimmtes anderes Element den Fokus erhält (z. B. wenn es ein Textfeld nach Ihrer Dropdown-Liste gibt).

Ich würde mich nicht allzu sehr darum kümmern, wie es scheint, dass Ihr Popup HAS auf Dropdown-Änderung angezeigt werden muss. Wenn dies nicht kritisch ist, haben Sie möglicherweise eine Hilfeschaltfläche auf der rechten Seite des Dropdownfensters, die bei einem Klick auf das entsprechende Fenster erscheint.

0

Ich bin ein wenig verwirrt durch Ihre Frage. Aber angenommen, dass die "Änderung" keine echte Änderung ist, denke ich, dass Sie eine Variable für "lastSelected" behalten könnten, und wenn eine Änderung auftritt, überprüfen Sie es dagegen. Wenn es gleich ist, ignoriere es. Wenn es anders ist, feuern Sie Ihre Ajax-Anfrage ab und aktualisieren Sie den Wert von "lastSelected".

1

Wenn es ein Ajax-Anruf ist, besteht die Möglichkeit, dass Ihr Ajax-Anruf zwischengespeichert wird. Stellen Sie sicher, dass Sie den Cache deaktivieren. etwas wie "cache: false"

+0

Ich sehe nicht, wie das auf die Frage bezieht. –