Il existe de nombreux exemples ajax typeahead pour bootstrap 2, par exemple, ceci ici Twitter bootstrap typeahead ajax) .
Cependant, j'utilise bootstrap 3 et je ne pouvais pas trouver un exemple complet. Au lieu de cela, il y a juste un tas d'extraits d'informations incomplètes avec des liens vers d'autres sites Web, par exemple ceci ici Où est le module JavaScript typeahead dans Bootstrap 3 RC 1?
Pourriez-vous, s'il vous plaît, poster un exemple complet sur l'utilisation de typeahead avec bootstrap 3, si vous chargez les données du serveur via ajax, chaque fois que l'utilisateur modifie l'entrée.
Avec bootstrap3-typeahead, je l'ai fait fonctionner avec le code suivant:
<input id="typeahead-input" type="text" data-provide="typeahead" />
<script type="text/javascript">
jQuery(document).ready(function() {
$('#typeahead-input').typeahead({
source: function (query, process) {
return $.get('search?q=' + query, function (data) {
return process(data.search_results);
});
}
});
})
</script>
Le serveur fournit le service de recherche sous le point de terminaison search
GET, en recevant la requête dans le paramètre q
et renvoie un JSON au format { 'search_results': ['resultA', 'resultB', ... ] }
. Les éléments du search_results
array sont affichés dans la tête de saisie.
Voici mon expérience étape par étape, inspirée par exemples de texte , à partir d'une application Scala/PlayFramework sur laquelle nous travaillons.
Dans un script LearnerNameTypeAhead.coffee
_ ( convertible bien sûr en JS ) j'ai:
$ ->
learners = new Bloodhound(
datumTokenizer: Bloodhound.tokenizers.obj.whitespace("value")
queryTokenizer: Bloodhound.tokenizers.whitespace
remote: "/learner/namelike?nameLikeStr=%QUERY"
)
learners.initialize()
$("#firstName").typeahead
minLength: 3
hint: true
highlight:true
,
name: "learners"
displayKey: "value"
source: learners.ttAdapter()
J'ai inclus le paquet typeahead et mon script sur la page, et il y a un div
autour de mon champ d'entrée comme suit:
<script [email protected]("javascripts/typeahead.bundle.js")></script>
<script [email protected]("javascripts/LearnerNameTypeAhead.js") type="text/javascript" ></script>
<div>
<input name="firstName" id="firstName" class="typeahead" placeholder="First Name" value="@firstName">
</div>
Le résultat est que pour chaque caractère saisi dans le champ de saisie après les premiers caractères minLength (3), la page émet une demande GET avec une URL ressemblant à /learner/namelike?nameLikeStr=
plus les caractères actuellement saisis. Le code serveur renvoie un tableau JSON d'objets contenant les champs "id" et "valeur", par exemple:
[ {
"id": "109",
"value": "Graham Jones"
},
{
"id": "5833",
"value": "Hezekiah Jones"
} ]
Pour jouer, j'ai besoin de quelque chose dans le fichier de routes:
GET /learner/namelike controllers.Learners.namesLike(nameLikeStr:String)
Et enfin, j'ai défini une partie du style pour la liste déroulante, etc. dans un nouveau fichier typeahead.css que j'ai inclus dans la page <head>
(ou accessible .css)
.tt-dropdown-menu {
width: 252px;
margin-top: 12px;
padding: 8px 0;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
-webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
-moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
box-shadow: 0 5px 10px rgba(0,0,0,.2);
}
.typeahead {
background-color: #fff;
}
.typeahead:focus {
border: 2px solid #0097cf;
}
.tt-query {
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.tt-hint {
color: #999
}
.tt-suggestion {
padding: 3px 20px;
font-size: 18px;
line-height: 24px;
}
.tt-suggestion.tt-cursor {
color: #fff;
background-color: #0097cf;
}
.tt-suggestion p {
margin: 0;
}
J'utilise ceci https://github.com/biggora/bootstrap-ajax-typeahead
Le résultat du code utilisant Codeigniter/PHP
<pre>
$("#produto").typeahead({
onSelect: function(item) {
console.log(item);
getProductInfs(item);
},
ajax: {
url: path + 'produto/getProdName/',
timeout: 500,
displayField: "concat",
valueField: "idproduto",
triggerLength: 1,
method: "post",
dataType: "JSON",
preDispatch: function (query) {
showLoadingMask(true);
return {
search: query
}
},
preProcess: function (data) {
if (data.success === false) {
return false;
}else{
return data;
}
}
}
});
</pre>
Vous trouverez ici des informations sur la mise à niveau vers la v3: http://tosbourn.com/2013/08/javascript/upgrading-from-bootstraps-typeahead-to-typeahead-js/
Voici quelques exemples aussi: http://Twitter.github.io/typeahead.js/examples/