web-dev-qa-db-fra.com

twitter bootstrap 3.0 typeahead exemple ajax

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.

25
Pascal Klein

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 searchGET, 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_resultsarray sont affichés dans la tête de saisie.

40
Michael

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;
}
4
wwkudu

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>   
3

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/

1
netcult