Twitter Bootstrap Typeahead - Id & Beschriftung
Ich bin mit Bootstrap 2.1.1 und jQuery 1.8.1 und versucht die Typeahead-Funktionalität.
Ich versuche, die Anzeige einer label und verwenden Sie ein id wie ein standard - <select />
Hier ist mein typeahead-Initialisierung:
$(':input.autocomplete').typeahead({
source: function (query, process) {
$('#autocompleteForm .query').val(query);
return $.get(
$('#autocompleteForm').attr('action')
, $('#autocompleteForm').serialize()
, function (data) {
return process(data);
}
);
}
});
Hier ist die Art von JSON, die ich sende
[{"id":1,"label":"machin"},{"id":2,"label":"truc"}]
Wie kann ich sagen process()
darzustellen, Etiketten und speichern Sie die gewählte ID in ein weiteres hidden-Feld?
Führen Sie eine der Kommentare hier helfen?
InformationsquelleAutor Pierre de LESPINAY | 2012-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein tolles tutorial hier, der erklärt, wie dies zu tun: http://tatiyants.com/how-to-use-json-objects-with-twitter-bootstrap-typeahead/ (Lesen Sie meinen Kommentar auf dieser Seite, falls noch nicht reflektiert worden, doch in den Hauptteil der post).
Basiert auf das tutorial, und das JSON für Sie bereitgestellt, die Sie tun können, so etwas wie dieses:
map
variable es, deren Anwendungsbereich. Nach deinem code ist es, global gemeinsam mit derobjects
variable. Dies bedeutet, dass Sie nur 1 typeahead auf der Seite in einer Zeit, da sonst die map-Objekt wird geteilt werden zwischen typeahead-Boxen und führen zu seltsamen bugs. Mehrere Typ-a-Köpfen, die Sie benötigen, um eine Schließung und definieren Sie die variable anzeigen gibt."Namen der Objekte müssen eindeutig sein, damit dies funktioniert." So, Ihre Lösung funktioniert nicht, wenn man, sagen wir, Filterung eine Liste von Menschen, die vielleicht den gleichen Namen haben.
Das wäre zwecklos, da der Benutzer nicht in der Lage sein, zu identifizieren, welcher Eintrag der richtige ist.
Sie könnten noch andere Elemente in der dropdown-Element zur Identifizierung des Eintrags, z.B. ein facebook-Bild basierend auf der id.
Ich wäre daran interessiert zu sehen, wie dies getan werden kann, wenn Sie mit der Bloodhound-Motor.
InformationsquelleAutor Gerbus
Ab version 0.10.1 von Twitter Typeahead (https://github.com/twitter/typeahead.js), Id /Label nativ unterstützt wird:
Wenn das Beispiel oben, ich bin übergeben Sie ein array von Objekten, um die Quelle callback (cb). Durch die Angabe displayKey: 'text', ich sage die Bibliothek zu verwenden, die 'text' - Eigenschaft für das auto-suggest. Wenn der "typeahead:wählen Sie' callback wird aufgerufen, das zweite übergebene argument in (Vorschlag) enthält das Objekt, das ausgewählt wurde.
InformationsquelleAutor Johnny Oshika
Zu klären, was ich sagte, in meinem Kommentar. Wenn Sie wollten, mehrere type-aheads auf der gleichen Seite müssen Sie festlegen, dass jede in einer Funktion und erstellen Sie eine separate map-variable für Sie.
Hinweis, wie ich den Gültigkeitsbereich der Karte anzeigen variable innerhalb der zwei-Feld-Initialisierung-Funktionen. Dies ist wichtig, es macht Sie sicher, dass die gleiche map-variable ist, die nicht durch die beiden input-Felder.
InformationsquelleAutor Michael Yagudaev
Ich das problem gesehen haben, mit einigen dieser Lösungen ist, dass die
source
Funktion wird immer wieder aufgerufen, auf jedem keyup-Ereignis der Eingabe-box. Bedeutung, die arrays gebaut werden und geloopt über auf jedem keyup-Ereignis ein.Ist dies nicht notwendig. Mit einem Abschluss können Sie verarbeiten die Daten nur einmal, und erhalten eine Referenz im
source
Funktion. Darüber hinaus werden folgende Lösung löst den globalen namespace mit dem problem von @Gerbus die Lösung, und ermöglicht auch die Wiedergabe mit dem array von Daten, sobald der Benutzer ausgewählt hat, der etwas (zum Beispiel, entfernen das Element aus der Liste).InformationsquelleAutor vcardillo
Die ausgewählte Antwort ist ein bisschen ein hack. Ich war auf der Suche für die gleiche Sache, und dieser Ansatz funktioniert wunderbar:
https://github.com/twbs/bootstrap/pull/3682
Hält zwei arrays, eins für die Namen, die typeahead zeigt, und eine für das Objekt, von dem der name extrahiert. Wenn eine der Optionen ausgewählt ist, wird der name um das Objekt zu suchen, Woher Sie kam.
InformationsquelleAutor Kevin Lawrence
Hier ist eine gekapselte Lösung. Mit dieser Lösung können Sie mehr als eine typeahead auf der gleichen Seite.
Dies ist eine modifizierte version von #13279176 Gerbus Antwort.
Nun, wenn Sie brauchen, Holen Sie den Schlüssel des aktuellen Elements, die Sie gerade brauchen
$('.make-me-typeahead').data('selected')
InformationsquelleAutor Capy
Ich habe gekämpft, mit diesem problem selber, hier ist die Lösung kam ich mit, für Daten vom Typ:
War:
InformationsquelleAutor HennyH
Nur eine andere Art zu implementieren Pierref Funktion.
InformationsquelleAutor Pedro Muniz
Die ausgewählte Antwort nicht, Umgang mit nicht eindeutigen Bezeichnungen (z.B. der name einer person). Ich bin mit dem folgenden hält der Standard-highlighter Formatierung:
InformationsquelleAutor will.ogden
Machte ich eine Eckige 2-Richtlinie typeahead-angular2, dass genau das tut, was Sie wollen, und behandelt den Fall der nicht eindeutigen labels. Sie können die typeahead Teil.
Finden Sie unter: https://github.com/BillelGuerfa/typeahead-angular2/
InformationsquelleAutor Billel Guerfa