un input avec autocomplémentation
*********************************
Il est parfois utile d'avoir un un input qui propose lors de la frappe les éléments possibles
Jquery apporte encore une fois une solution élégante.
en effet suite à la frappe de x caractères jquery va vori auprès d'une source pour obtenir une liste d'élément qu'il va alors afficher
Il faut bien noter que contrairement à un select-box (voir l'utilisation de *chosen*), nous utilisons un input et donc la frappe reste libre.
Exemple de liste au format json qu'on souhaite utiliser (fichier search.txt)
::
[
{"label" : "Aragorn"},
{"label" : "Arwen"},
{"label" : "Bilbo Baggins"},
{"label" : "Boromir"},
{"label" : "Frodo Baggins"},
{"label" : "Gandalf"},
{"label" : "Gimli"},
{"label" : "Gollum"},
{"label" : "Legolas"},
{"label" : "Meriadoc Merry Brandybuck"},
{"label" : "Peregrin Pippin Took"},
{"label" : "Samwise Gamgee"}
]
Il faut noter que:
- seul le format json est possible avec cette fonction
- chaque élément doit avoir un id label (qui correspondra à la valeur dans la liste)
le fichier html avec le code javascript
.. code-block:: html
jQuery UI Autocomplete - Remote datasource
Result:
le code javascipt
.. code-block:: javascript
$(function() {
function log( message ) {
$( "
" ).text( message ).prependTo( "#log" );
$( "#log" ).scrollTop( 0 );
}
$( "#birds" ).autocomplete({
source: "search.txt",
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.value :
"Nothing selected, input was " + this.value );
}
});
});
On peut noter que dans cette exemple on paramètre une action lors de la sélection d'un élément dans la liste affichée.
Si cette exemple est simple il pose deux problèmes majeurs:
- la liste est fixe et ne tient pas compte des caractères déjà frappé.
- il n'est pas possible lors de la sélection d'avoir accès à d'autres informations de la liste
On peut modifier le code afin de résoudres ces problèmes via l'utilisation d'un serveur qui va fournir une liste au format
*json* suivant les caractères frappés
exemple de liste retournée après la frappe de "ar"
::
[
{"label" : "Aragorn", "id" : "ara"},
{"label" : "Arwen", "id" : arw}
]
modification du code javascript
.. code-block:: javascript
$(function() {
function log( message ) {
$( "