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?

Hier ist mein Code:

var availableTags = ["cheese", "milk", "dairy", "meat", "vegetables", "fruit", "grains"];
$("[id^=item-tag-]").autocomplete({
    source: availableTags,

    select: function(){
        var newTag = $(this).val();
        $(this).val("");
        $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    }
});

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:

$('[id^=item-tag-]').keyup(function(e) {
    if(e.keyCode == 188) {
        var newTag = $(this).val().slice(0,-1);
        $(this).val('');
        $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    }
});

Das eigentliche Endergebnis besteht darin, dass die automatische Vervollständigung mit mehreren Auswahlen funktioniert. Wenn jemand Vorschläge dazu hat, wäre er willkommen.

Benutzer-Avatar
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.

Der Code darin prüft speziell auf false:

if ( false !== self._trigger( "select", event, { item: item } ) ) {
  self.element.val( item.value );
}

  • 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.

select: function(event, ui){
    var newTag = $(this).val();
    $(this).val("");
    $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    event.preventDefault();
}

Benutzer-Avatar
captahab

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
}

Benutzer-Avatar
Silvana Saly Viana

Es funktioniert gut für mich.

Nach dem ausgewählten Ereignis habe ich die Ereignisänderung verwendet.

 change:function(event){
   $("#selector").val("");  
   return false;
 }

Ich bin ein Anfänger!

Versuche dies

select: function (event, ui) {
    $(this).val('');
    return false;       
}

Benutzer-Avatar
Alexander Romanow

Ich habe es gerade gelöst und gezwungen, den Fokus zu verlieren:

$('#select_id').blur();
printResult();

1309150cookie-checkLöschen Sie das Formularfeld nach der Auswahl für die automatische Vervollständigung der jQuery-Benutzeroberfläche

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy