J'essaie de trouver un exemple de travail de l' élément twitter bootstrap typeahead qui fera un appel ajax pour remplir sa liste déroulante.
J'ai un exemple de saisie semi-automatique de travail existant qui définit l'URL ajax et comment traiter la réponse
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
var options = { minChars:3, max:20 };
$("#runnerquery").autocomplete('./index/runnerfilter/format/html',options).result(
function(event, data, formatted)
{
window.location = "./runner/index/id/"+data[1];
}
);
..
Que dois-je changer pour convertir cela en l'exemple de typeahead?
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
var options = { source:'/index/runnerfilter/format/html', items:5 };
$("#runnerquery").typeahead(options).result(
function(event, data, formatted)
{
window.location = "./runner/index/id/"+data[1];
}
);
..
Je vais attendre que le problème « Ajouter le support des sources distantes pour typeahead » soit résolu.
jquery
twitter-bootstrap
jquery-autocomplete
jquery-ui-autocomplete
typeahead.js
emeraldjava
la source
la source
Réponses:
Edit: typeahead n'est plus inclus dans Bootstrap 3. Découvrez:
De Bootstrap 2.1.0 à 2.3.2, vous pouvez le faire:
Pour consommer des données JSON comme ceci:
Notez que les données JSON doivent être du bon type MIME (application / json) afin que jQuery les reconnaisse comme JSON.
la source
get
au lieu degetJSON
? Cela semble plus approprié.Vous pouvez utiliser le fork BS Typeahead qui prend en charge les appels ajax. Vous pourrez alors écrire:
la source
["aardvark", "apple"]
,. J'ai dû définir explicitement ledataType
paramètre dans l'$.post
appel. Voir jQuery.post () .Content-type
tête surapplication/json
source
fonction à exécuter.À partir de Bootstrap 2.1.0:
HTML:
Javascript:
Vous pouvez maintenant créer un code unifié, en plaçant des liens "json-request" dans votre code HTML.
la source
$(this)[0].$element.data('link')
.this.$element.data('link')
Toutes les réponses se réfèrent à la tête de frappe BootStrap 2, qui n'est plus présente dans BootStrap 3.
Pour toute autre personne dirigée ici à la recherche d'un exemple AJAX en utilisant le nouveau typeahead.js Twitter post-Bootstrap , voici un exemple de travail. La syntaxe est un peu différente:
Cet exemple utilise à la fois la suggestion synchrone (l'appel à processSync ) et asynchrone, vous verrez donc certaines options apparaître immédiatement, puis d'autres seront ajoutées. Vous pouvez simplement utiliser l'un ou l'autre.
Il existe de nombreux événements pouvant être liés et certaines options très puissantes, notamment le travail avec des objets plutôt qu'avec des chaînes, auquel cas vous utiliseriez votre propre fonction d' affichage personnalisée pour rendre vos éléments sous forme de texte.
la source
["Thing 1","Thing 2"]
, ou avec une fonction d'affichage personnalisée, un tableau d'objets en fonction de vos besoins, par exemple[{"id":1,"label":"Foo"},{"id":2,"label":"Bar"}]
[{"id":1,"label":"Foo"},{"id":2,"label":"Bar"}]
, maintenant je veux montrer deux colonnes dans la liste déroulante typeahead avec id et label. Comment puis je faire ça?J'ai augmenté le plugin Bootstrap typeahead original avec des capacités ajax. Très simple d'utilisation:
Voici le dépôt github: Ajax-Typeahead
la source
JSON
ressembler le côté serveur ? Je reçoisUncaught TypeError: Cannot read property 'length' of undefined
. J'utilisejson_encode($array)
et envoie des en-têtes à droite ('Content-Type: application/json; charset=utf-8'
). version jqueryjQuery v1.9.1
J'ai fait quelques modifications sur jquery-ui.min.js:
et ajouter css suivant
Fonctionne parfaitement.
la source
J'utilise cette méthode
la source
On peut faire des appels en utilisant Bootstrap. La version actuelle ne présente aucun problème de mise à jour source. Problème de mise à jour de la source de données de type Bootstrap avec post-réponse , c'est-à-dire que la source de bootstrap une fois mise à jour peut être à nouveau modifiée.
Veuillez vous référer ci-dessous pour un exemple:
la source
À ceux qui recherchent une version en coffeescript de la réponse acceptée:
la source
J'ai parcouru ce post et tout ne voulait pas fonctionner correctement et j'ai finalement reconstitué les bits de quelques réponses, j'ai donc une démo de travail à 100% et je vais la coller ici pour référence - collez-la dans un fichier php et assurez-vous que les inclus sont dans le bon endroit.
la source
Essayez ceci si votre service ne renvoie pas le bon en-tête de type de contenu application / json:
la source
MISE À JOUR: j'ai modifié mon code en utilisant cette fourchette
également au lieu d'utiliser $ .each, je suis passé à $ .map comme suggéré par Tomislav Markovski
Cependant, je rencontre des problèmes en obtenant
comme vous pouvez le voir sur un nouveau post, j'essaie de comprendre ici
j'espère que cette mise à jour vous sera utile ...
la source
Array.map
place$.each
et remplacerais le contenu de toute votresuccess
fonction de rappel parvar manufacturers = results.data.manufacturers.map(function (item) { return { id: item.Manufacturer.id, manufacturer: item.Manufacturer.manufacturer } });
Je n'ai pas d'exemple de travail pour vous ni de solution très propre, mais laissez-moi vous dire ce que j'ai trouvé.
Si vous regardez le code javascript de TypeAhead, il ressemble à ceci:
Ce code utilise la méthode jQuery "grep" pour faire correspondre un élément du tableau source. Je n'ai pas vu d'endroits où vous pourriez accrocher un appel AJAX, donc il n'y a pas de solution "propre" à cela.
Cependant, une façon quelque peu hacky que vous pouvez faire est de tirer parti de la façon dont la méthode grep fonctionne dans jQuery. Le premier argument de grep est le tableau source et le second argument est une fonction qui est utilisée pour faire correspondre le tableau source (notez que Bootstrap appelle le "matcher" que vous avez fourni lorsque vous l'avez initialisé). Ce que vous pourriez faire est de définir la source sur un tableau factice à un élément et de définir le matcher comme une fonction contenant un appel AJAX. De cette façon, il exécutera l'appel AJAX une seule fois (puisque votre tableau source ne contient qu'un seul élément).
Cette solution est non seulement hacky, mais elle souffrira de problèmes de performances car le code TypeAhead est conçu pour effectuer une recherche à chaque pression de touche (les appels AJAX ne devraient vraiment se produire que sur quelques touches ou après un certain temps d'inactivité). Mon conseil est de l'essayer, mais restez avec une autre bibliothèque de saisie semi-automatique ou utilisez-la uniquement pour les situations non AJAX si vous rencontrez des problèmes.
la source
lorsque vous utilisez ajax, essayez
$.getJSON()
plutôt que$.get()
si vous avez des problèmes avec l'affichage correct des résultats.Dans mon cas, je n'ai obtenu que le premier caractère de chaque résultat lorsque j'ai utilisé
$.get()
, bien que j'aie utiliséjson_encode()
côté serveur.la source
j'utilise
$().one()
pour résoudre cela; Lorsque la page est chargée, j'envoie ajax au serveur et j'attends de terminer. Passez ensuite le résultat à la fonction.$().one()
est important. Car forcez typehead.js à être attaché une fois. désolé pour une mauvaise écriture.la source
?>
la source