Autocomplétion sur plusieurs champs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Autocomplétion sur plusieurs champs

Autocomplétion sur plusieurs champs

par cf357 » 26 janv. 2008, 23:20

/!\ Je préviens, je ne suis pas un fan d'Ajax et compagnie, et je n'y connais pas grand chose.

Je suis en train de faire une application qui necessite de pouvoir ajouter dynamiquement des champs textes, et ceux-ci doivent être autocomplétés. J'utilise le composant Autocompleter de Scriptaculous.


1] Pour ajouter mes champs textes, j'ai une fonction JS comme cela, appelée quand on clique sur un bouton :

Code : Tout sélectionner

// [Code 1] function addInput() { c=document.getElementById('cadre'); c2=c.getElementsByTagName('input'); ch=document.createElement('input'); ch.setAttribute('type','text'); ch.setAttribute('name','artist'+c2.length); ch.setAttribute('id','artist'+c2.length); c.appendChild(ch); }
Et pour l'autocomplétion, un code qui correspond a cela pour chaque champ texte :

Code : Tout sélectionner

// [Code 2] new Ajax.Autocompleter( "artist"+X, "artists", "includes/get_artists.php", { paramName: 'artist', minChars: 1 } );
avec 'artist+X' l'id du champ.

Seulement voilà, soit je n'ai qu'un seul champ autocomplété et je ne peux pas en ajouter, soit je peux en ajouter mais ils ne sont pas autocomplétés.
Je pensais pourtant qu'il aurait "suffit" de copier le code 2 a la fin de la fonction du code 1, ce qui me parait logique avec mon mode de pensée "orienté C".

En attendant, j'ai utilisé l'option "token" dans le constructeur pour pouvoir séparer mes infos par une virgule au lieu de les mettre chacune dans un champ texte.


2] Par defaut, lorsqu'on tape sur <Entrée> pour valider un choix de la liste d'autocomplétion, cela valide le formulaire... gênant ! J'ai fouillé dans le doc de Scriptaculous mais pour l'instant je n'ai rien trouvé...


Liens directs :
- Ajax.Autocompleter
- Autocompleter.Base


Quelqu'un peut m'éclairer ?
(Si je n'ai pas donné toutes les indicatons, faites le moi savoir ;))


------------------------------------ [edit] -------------------------------------

J'ai en quelque sorte résolu le problème. J'ai modifié l'interface, l'utilisateur saisit ses données autocomplétées toujours dans le même champ, séparées par une virgule.
Quand il appuie sur <entrée> ou <valider>, ça appelle une fonction update() qui ajoute les éléments dans une liste et reset le champ. L'utilisateur a la possibilité de supprimer chaque élément s'il le souhaite.

Au final je trouve même ça + joli !

J'ai résolu le probleme de la touche en entrée en observant l'évènement :

Code : Tout sélectionner

Event.observe ('artist','keypress', function(evt) { if(evt.keyCode == Event.KEY_RETURN) { Event.stop(evt); update(); } } );
Bye !