Löschen Sie das Formularfeld nach der Auswahl für die automatische Vervollständigung der jQuery-Benutzeroberfläche
Lesezeit: 4 Minuten
Ich entwickle ein Formular und verwende jQuery UI Autocomplete. Wenn der Benutzer eine Option auswählt, möchte ich, dass die Auswahl in einer Spanne erscheint, die an das übergeordnete Element angehängt wird <p> Schild. Dann möchte ich, dass das Feld gelöscht wird, anstatt mit der Auswahl gefüllt zu werden.
Die Spanne wird gut angezeigt, aber ich kann das Feld nicht löschen.
Wie brechen Sie die standardmäßige Auswahlaktion von jQuery UI Autocomplete ab?
Einfach machen $(this).val(""); funktioniert nicht. Verrückt ist, dass fast die exakte Funktion gut funktioniert, wenn ich die automatische Vervollständigung ignoriere und nur aktiv werde, wenn der Benutzer ein Komma als solches eingibt:
Das eigentliche Endergebnis besteht darin, dass die automatische Vervollständigung mit mehreren Auswahlen funktioniert. Wenn jemand Vorschläge dazu hat, wäre er willkommen.
Nick Craver
Hinzufügen $(this).val(''); return false;
bis zum Ende deines select Funktion, um das Feld zu löschen und das Ereignis abzubrechen 🙂
Dadurch wird verhindert, dass der Wert aktualisiert wird. Sie können sehen, wie es funktioniert um Zeile 109 hier.
Lassen Sie mich nur hinzufügen, dass Sie, sobald Sie false zurückgeben, den Wert nicht mehr selbst festlegen müssen (dh keine Notwendigkeit für $(this).val('');)
– Uri
7. September 2011 um 10:06 Uhr
Wenn man will, dass das Eingabefeld überhaupt keinen Wert hat, halte ich einen Aufruf an .val('') muss noch vorkommen. Das return false; verhindert nur, dass der Text des ausgewählten Elements im Eingabefeld erscheint.
– Ryan
19. Oktober 2011 um 9:37 Uhr
Uri ist falsch und Ryan hat Recht. Sie müssen false zurückgeben, um zu verhindern, dass es mit Ihrer Auswahl aktualisiert wird, und Sie benötigen zusätzlich $(this).val(”), wenn Sie es löschen möchten.
– mynameistechno
16. Dezember 2011 um 21:34 Uhr
return false hat es für mich getan. Ich hatte es so funktionieren lassen, dass es, wenn eine bestimmte Bedingung erfüllt war, Dinge tun und den Wert ausblenden würde, und wenn es falsch ist, andere Dinge tun und den Wert ausblenden würde. Nur die “wahre” Bedingung hat den Wert tatsächlich ausgeblendet. Es war ärgerlich, endlich herauszufinden, dass ich einfach falsch zurückgeben kann, um zu verhindern, dass es jemals im Suchfeld aktualisiert wird. Vielen Dank!
– notaceo
5. April 2014 um 1:41 Uhr
Sie hätten dokumentieren sollen, dass die Auswahlfunktion ihre Auswahlfunktion nicht außer Kraft gesetzt hat.
– r3wt
30. Januar 2016 um 13:46 Uhr
Anstatt false zurückzugeben, könnten Sie auch event.preventDefault() verwenden.
return false wird innerhalb des select-Callbacks benötigt, um das Feld zu leeren. aber wenn Sie das Feld erneut steuern, dh den Wert setzen möchten, müssen Sie eine neue Funktion aufrufen, um aus der Benutzeroberfläche auszubrechen.
Vielleicht haben Sie einen Eingabeaufforderungswert wie:
var promptText = "Enter a grocery item here."
Legen Sie es als Wert des Elements fest. (auf Fokus setzen wir auf ”).
$("selector").val(promptText).focus(function() { $(this).val(''); }).autocomplete({
source: availableTags,
select: function(){
$(this).parent().append("<span>" + ui.item.value + "<a href=\"#\">[x]</a> </span>");
foo.resetter(); // break out //
return false; //gives an empty input field //
}
});
foo.resetter = function() {
$("selector").val(promptText); //returns to original val
}
Silvana Saly Viana
Es funktioniert gut für mich.
Nach dem ausgewählten Ereignis habe ich die Ereignisänderung verwendet.