• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Onkeydown-Überprüfung und Ajax-Aufruf

marc21ja

New member
Hallo!

Ich möchte eine Suggest-Funktion für eine Webseiten-Suche erstellen, wobei man neben der Maus auch mit den Cursortasten durch die Vorschläge scrollen kann. Im Textfeld ist ein onkeyup-Handler, der eine Funktion aufruft, die per Ajax die Vorschläge beim Server anfragt.

Das Problem: Wie kann ich abfangen, dass ständig Ajax-Aufrufe erfolgen, wenn man durch die Cursortasten (keyCodes 38 und 40) den Event-Handler auslöst?

Gibt es irgendwie eine Möglichkeit, herauszufinden, mit welcher Taste das onkeyup-Event ausgelesen wurde?

Wenn ich a) einen zusätzlichen Handler auf die Eingaben im Formular mache, wird das Ajax trotzdem ausgeführt.

b) Das letzte Zeichen des Textfeld-Values rauszufiltern, führt ebenfalls zu keinem Ergebnis, da manche Tasten offenbar (und sinnvollerweise) nicht im Value mitgespeichert werden.

Vielen Dank, viele Grüße
Marc
 
Vorweg: Ich würde dafür fertige langjährig erprobte Lösungen verwenden. jQuery UI hat ein sehr gutes Autosuggest: http://jqueryui.com/autocomplete
Tasten abfangen hab ich mal für irgendwas mit diesem Code gemacht:
HTML:
function tastenpruefung(ev,aufruf) {
	var key = (ev.which) ? ev.which : ev.keyCode;
	if (key == 13) {
		if (ev.preventDefault){
			ev.preventDefault();	// verhindert das absenden eines umspannenden <form>
		}
		else {
			ev.returnValue = false;	// IE8
		}
		aufruf();
	}
}
Aufruf: .onkeydown = function(e) { tastenpruefung(e || event,aufruf_wenn_enter_gedrueckt); };

Musste dir die Codes für die gew. Tasten noch raussuchen.
 
Hallo micdoe,

vielen Dank, das hat super geklappt! Das nächste Problem ist, dass ich einen Body-Event habe, damit wenn man irgendwohin außerhalb des "Suggest-Fensters" klickt, es geschlossen wird und der Defaultwert angezeigt wird.

Allerdings wirkt scheinbar auch ein Return wie ein Mausklick, so dass das Formular mit dem Defaultwert abgeschickt wird. Kann man diese "Mausersatzfunktion" der Returntaste nicht unterbinden?

Viele Grüße
Marc
 
Das Problem: Wie kann ich abfangen, dass ständig Ajax-Aufrufe erfolgen, wenn man durch die Cursortasten (keyCodes 38 und 40) den Event-Handler auslöst?
Ich würde mir einfach den Wert, der beim letzten AJAX übergeben wurde, speichern und nur dann einen neuen AJAX-Aufruf starten, wenn sich der ändert. Das ist ja das einzige, was eigentlich zählt.

Ansonsten würde ich mit mikdoe anschließen und sagen, dass du besser fährst, wenn du da schon existierende Lösungen verwendest.

Allerdings wirkt scheinbar auch ein Return wie ein Mausklick
Das kann eigentlich nicht sein. Bist du dir sicher, dass du nur einen click-Eventlistener hast?
 
Zurück
Oben