2016-03-21 13 views
0

Ich habe twitter typeahead implementiert, damit ein Benutzer seinen Standort auswählen kann. Er tippt seinen Standort name ein, wählt dann aus der Liste aus und der id des Ortes, den er ausgewählt hat, wird auf dem Formular veröffentlicht.Wie bekomme ich den Wert von id in twitter typeahead?

Dies funktioniert gut, und ich nehme an dieser folgenden Liste haben:

[ 
    United States : 1, 
    Canada : 2, 
    England: 3, 
    China: 4, 
    India: 5, 
    .... // other locations 
] 

Jetzt ein Benutzer Kanada wählen Sie das Formular aus, die ID 2 wird in der Datenbank gespeichert. Aber wenn der Benutzer zum selben Formular zurückkehrt, mache ich eine Abfrage, um den von ihm gewählten Ort zu erhalten, in diesem Fall wird die ID 2 zurückgegeben.

Wie wähle ich automatisch Kanada in der Typehead, um die Position anzuzeigen, die er ausgewählt hat?

ich versuchte

$('.typeahead').typeahead('val', value) //where value = 2 

aber nicht

+0

bekomme ich keine Fehler, aber das einfach die '2' im typeahead statt 'canada' – user2707590

+0

Bitte erstellen [a fiddle] (https://jsfiddle.net/). – Vucko

+0

hier ist eine js fiddle, die ich gerade erstellt habe. Die Geige ist, wenn Sie einen Ort auswählen, die ID erhalten und diese ID wird in der Datenbank gespeichert, wenn das Formular übermittelt wird. jetzt, wenn ich die gespeicherten daten von db und display in der typehead nehmen muss. fiddle: https://jsfiddle.net/mu3cxv9w/ – user2707590

Antwort

1

funktioniert Da die typeahead Kontrolle ist „nur“ ein HTML-Eingang, es gibt keinen Mechanismus einen Textwert für bevöl basierend auf einem ID-Wert aufgebaut ist . Sie müssen diesen Teil selbst tun.

I've created a fiddle to demonstrate.

Sie können eine Vielzahl von verschiedenen Methoden verwenden, um dies zu erreichen, aber ich benutze on focus es in meiner Implementierung zu behandeln.

.on('focus', function() { 
    if (defaultOption.length) { 
     var nm = $.map(locs, function(obj) { 
     if (obj.id === defaultOption) 
      return obj.name; // or return obj.name, whatever. 
     }); 
     console.log(nm); 
     $(this).data().ttTypeahead.input.trigger('queryChanged', nm); 
    } 
    }); 

In diesem Fall ich sende einen default (das wäre, was wieder aus der Datenbank kommt) und das Hinzufügen sie dann an der Quelle als den ersten Punkt und dann das Auslösen der Abfrage geändert Ereignis.

Eine andere Möglichkeit, dies zu handhaben, wäre, einfach den erwarteten Wert in das Eingabefeld einzugeben. Ich habe eine Demonstration gezeigt, wie du am Ende der verbundenen Geige damit umgehen kannst. Der Code sucht nach einem Standardwert und füllt dann die Eingabe mit dem korrekten Namen.

if (defaultOption.length) { 
    nm = $.map(locs, function(obj) { 
     if (obj.id === defaultOption) 
     return obj.name; // or return obj.name, whatever. 
    }); 
    } 

    $('.typeahead').val(nm); 
+0

Warum hast du Locs fest programmiert? Was ist, wenn wir die JSON-API verwenden müssen? und könnten Sie mich auf eine Dokumentation verweisen, wo es mehr Informationen über diesen Teil '$ (this) .data() gibt. TtTypeahead.input.trigger ('queryChanged', nm);'. in der Dokumentation von typeahead.js gibt es nicht einmal das 'queryChanged' Ereignis. – user2707590

+0

Ich benutze den API Anruf. Wenn Sie jedoch nicht den Zeichenfolgenwert ausgeben, den Sie anzeigen möchten, müssen Sie nachsehen. Wenn Sie sich den Code ansehen, werden Sie sehen, dass ich die Standard "2" dem Namen "Kanada" zuordnen, um "Kanada" in dem Textfeld anzuzeigen. – whipdancer

+0

Diese Zeile '$ (this) .data(). TtTypeahead.input.trigger ('queryChanged', nm);' ist ein Hack, der jQuery verwendet, um das volle Typeahead-Objekt zu erhalten. Damit können Sie einen Wert auf die Suchergebnisse anwenden. – whipdancer

Verwandte Themen