Ich habe ein Eingabefeld, in dem ich versuche, einen Vorschlag zur automatischen Vervollständigung zu machen. Code sieht aus wie
<input type="text" id="myinput">
<div id="myresults"></div>
Beim blur()
Ereignis der Eingabe möchte ich das div der Ergebnisse ausblenden:
$("#myinput").live('blur',function(){
$("#myresults").hide();
});
Wenn ich etwas in meine Eingabe schreibe, sende ich eine Anfrage an den Server und erhalte eine json-Antwort, analysiere sie in die ul-> li-Struktur und lege diese ul in mein #myresults
div.
Wenn ich auf dieses analysierte li-Element klicke, möchte ich den Wert von li festlegen, um #myresults
div einzugeben und auszublenden
$("#myresults ul li").live('click',function(){
$("#myinput").val($(this).html());
$("#myresults").hide();
});
Alles läuft gut, aber wenn ich auf mein li- blur()
Ereignis klicke, wird es vorher ausgelöst click()
und der Wert der Eingabe erhält nicht das HTML von li.
Wie kann ich eine click()
Veranstaltung vorher einrichten blur()
?
blur
jedoch nach dem Klicken auf ein Ereignis wirklich ausgelöst werdenli
, müssen Sie es wahrscheinlich nicht$("#myresults").hide()
im Klick-Handler ausführen . Es scheint so,$(this).html()
als würde eine leere Zeichenfolge zurückgegeben. Könnten Sielog
oderalert
$(this).html()
um sicher zu gehen?blur()
undclick()
Handler hinzuzufügen , es gibt keine Aktionen nach demblur()
EndeAntworten:
Lösung 1
Hören Sie
mousedown
stattclick
.Die
mousedown
undblur
-Ereignisse treten nacheinander auf, wenn Sie die Maustaste drücken, treten jedochclick
nur auf, wenn Sie sie loslassen.Lösung 2
Sie können
preventDefault()
inmousedown
der Drop - Down - Block von Fokus zu stehlen. Der leichte Vorteil ist, dass der Wert ausgewählt wird, wenn die Maustaste losgelassen wird. So funktionieren native Auswahlkomponenten. JSFiddlequelle
GEIGE
quelle
Ich war mit diesem Problem konfrontiert und die Verwendung
mousedown
ist für mich keine Option.Ich habe dies mit
setTimeout
der Handler-Funktion gelöstquelle
Ich habe gerade eine ähnliche Frage beantwortet: https://stackoverflow.com/a/46676463/227578
Eine Alternative zu den Mousedown-Lösungen besteht darin, Unschärfeereignisse zu ignorieren, die durch Klicken auf bestimmte Elemente verursacht werden (dh überspringen Sie in Ihrem Unschärfehandler die Ausführung, wenn Sie auf ein bestimmtes Element klicken).
quelle
Mousedown-Lösungen funktionieren bei mir nicht, wenn ich auf Elemente ohne Schaltflächen klicke. Folgendes habe ich mit der Unschärfefunktion in meinem Code gemacht:
quelle