2012-04-15 8 views
3

Ich fühle mich blöd, diese Frage hier zu stellen, aber ich habe noch keine Lösung gefunden.OnChange-Ereignis wird zu früh in Dropdown/Eingabe ausgelöst?

Vielleicht ist das, wie das Onchange-Ereignis funktionieren soll, aber es scheint, als ob es zu früh feuert (oder dass es wieder feuern sollte, wenn die endgültige Auswahl getroffen wird). Ich habe eine Auswahl/Dropdown, die ich verwende, um einen Teil meines Bildschirms zu aktualisieren, aber ich habe festgestellt, dass in Chrome und IE9 es das Onchange-Ereignis aufgerufen wird, sobald der Benutzer startet Eingabe (funktioniert gut mit einer Mausauswahl) - Ich nehme an, das macht Sinn, weil eine neue Auswahl getroffen wird, auch wenn sie nicht tippt. Wie auch immer, der Bildschirm wird aktualisiert, aber nicht mit den Daten für die endgültige Auswahl des Benutzers im Dropdown (es ist so, als würde es beim ersten Treffer/Änderung ausgelöst, aber nicht erneut ausgelöst, wenn der Benutzer die Eingabe beendet und eine letzte Auswahl getroffen wird) .

Ich habe es auf onblur geschaltet, aber dann wird es nicht ausgelöst, bis der Benutzer die Auswahl getroffen und weitergeht, so würde ich gerne eine Lösung finden, die früher als onblur, sondern nach der endgültigen Auswahl des Benutzers ausgelöst wird gemacht.

Dies ist auf einer aspx Seite in einem MVC-progject:

<asp:DropDownList ID="employeeDropdown" runat="server" onchange="RefreshCalendarData()" /> 

Dies ist die js seine Berufung Funktion:

function RefreshCalendarData() { 
    // code omitted 
    Scheduler.Refresh(); 
} 

Gibt es gute Lösungen/Abhilfen js oder jquery verwenden?

+0

Nicht ASP.NET _use_ jQuery? Außerdem sehe ich dieses Problem (zumindest in Chrome) nicht, wo das Ereignis 'change' nicht für die endgültige Dropdown-Auswahl des Benutzers ausgelöst wird: http://jsfiddle.net/mattball/Mx7TN/ –

+0

@ MдΓΓБДLL - ich habe es versucht Dies auch mit jQuery. Ich habe das Problem immer noch erlebt. Sie scheinen korrekt zu sein, da ich das Problem mit Ihrem Beispiel nicht wiederholen konnte, aber meine Liste enthält etwa 150 Elemente - aber ich stimme zu, dass sollte nicht wichtig sein und es scheint, dass es Feuer fangen sollte, sobald die endgültige Auswahl getroffen wird - und vielleicht ist es feuern ein zweites Mal, aber mein Refresh-Prozess dauert lange genug, dass es nicht erneut aufgerufen wird (oder es wird noch ausgeführt, so dass der Anruf ignoriert wird)? Danke für deine Hilfe. – Josh

+0

Wahrscheinlich ist die beste Methode, Onchange nicht für ausgewählte Menüs zu verwenden und einen kleinen "Go" -Button neben der Auswahl zu haben. IE wird auch eine Änderung für jede ausgewählte Navigation mit den Pfeiltasten auslösen, die jeder Benutzer sein könnte, der nicht die Maus verwendet – Gareth

Antwort

-1

ja das onChange-Ereignis funktioniert so, wie es sollte. Sie können einen Timer an das Fenster anhängen und prüfen, ob das Feld geändert wurde, anstatt onChange zu verwenden.

So können Sie eine globale Variable erstellen, die auf "wahr" aktualisiert wird, wenn der Benutzer das Formular verwischt, und einen Zeitgeber, um zu überprüfen, ob der Benutzer eine letzte Auswahl getroffen hat.

if(userBlur == true && userSelect == true){ 
    //do the code 
    window.clearInterval(); 
}else{ 
    //wait for change 
} 

sollte näher sein, was Sie erwarten.

+0

Nein, das Abrufen mit Timer ist hier nicht unbedingt notwendig. –

1

Sie können Serversteuerelemente in einem ASP.NET MVC-Projekt (mit sehr wenigen Ausnahmen) verwenden. DDL funktioniert korrekt in IE/Chrome bei der Eingabe - siehe und My blog Cascading DropDownList in ASP.Net MVC und Working with the DropDownList Box and jQuery Spielen Sie mit meinem Cascading DDL-Beispiel herum.

+0

Das hätte vielleicht geholfen, aber diese Seite musste aufgrund der Kontrolle eines Drittanbieters, die wir brauchten, eine ASPX-Seite bleiben. Das Projekt ist MVC, aber nicht diese Seite. Vielen Dank. – Josh

Verwandte Themen