Page 1 sur 1

listes avec sélection via les premières lettres et événement

Posté : 15 févr. 2008, 10:37
par d0m
Bonjour,

j'ai récupéré un script pour liste déroulante qui permet la sélection d'éléments en le tapant au clavier, avec plus d'une lettre.
ex : pour les pays, taper F puis R va sélectionner France .

voilà le script qui fonctionne sur l'événement onKeyDown.
@modérateurs, enlevez le si vous pensez que je n'ai pas le droit de le mettre :

Code : Tout sélectionner

/* Script téléchargé du Coin Web de QuentinC http://www.quentinc.net/ Nom du script : Liste avec recherche clavier Catégorie : Formulaires Date de dernière modification : Lundi 23 janvier 2006 15:30 URL exact : /javascript/script39-exec-liste-avec-recherche-clavier/ Vous trouverez d'autres scripts à l'adresse : http://www.quentinc.net/javascript/ © 2002-2006, QuentinC Vous pouvez utiliser, modifier et redistribuer ce script, à condition de laisser les présents commentaires intacts, et de ne pas l'utiliser à des fins commerciales. */ var timer = null; var chaine = ""; function startsWith (str1, str2) { var k = str1.substring(0, str2.length); return (str2.toLowerCase() == k.toLowerCase()); } function liDown (list) { var c = event.keyCode; if (c < 48 && c!=32) return true; var s = String.fromCharCode(c); chaine += s; var n = list.selectedIndex; var ok = false; if (chaine.length > 1 && startsWith(list.options[n].text, chaine)) ok=true; for (var i=n+1; i < list.options.length && !ok; i++){ if (startsWith(list.options[i].text, chaine)) { n = i; ok = true; } } for (var i=0; i < n && !ok; i++) { if (startsWith(list.options[i].text, chaine)) { n = i; ok = true; } } list.selectedIndex = n; if (timer!=null) clearTimeout(timer); timer = setTimeout("clearChaine();", 500); return false; } function clearChaine () { chaine=""; } <SELECT .... onKeyDown="liDown(this);">
Le script fonctionne, par contre j'ai aussi sur cette liste une action sur l'événement onChange.
En sélectionnant un élément avec le clavier via ses premières lettre, l'élément onChange ne se produit jamais...

Une idée de comment remédier à ça?

Re: listes avec sélection via les premières lettres et événe

Posté : 15 févr. 2008, 11:39
par zeus
L'évènement onChange est appelé lorsque l'élément perd le focus, c'est à dire lorsque tu quittes le champs.
Cet évènement n'est donc pas adapté à faire de l'auto-complétion. ;)
@modérateurs, enlevez le si vous pensez que je n'ai pas le droit de le mettre :
Qu'est-ce qui te fait penser que tu n'as pas le droit ?

Re: listes avec sélection via les premières lettres et événe

Posté : 15 févr. 2008, 15:52
par d0m
Qu'est-ce qui te fait penser que tu n'as pas le droit ?
On ne sait jamais.

Bref ça m'embête un peu de pas pouvoir combiner auto-complétion et onChange...

Posté : 15 févr. 2008, 16:42
par zeus
lors du déclenchement de l'évènement onKeyDown, tu appelles une fonction JS, non ?
Pourquoi ne pas appeler la méthode qui est appelée lors de l'évènement onChange dans cette 1ere méthode ?

Posté : 15 févr. 2008, 17:08
par d0m
merci pour l'astuce, en creusant un peu j'ai trouvé la syntaxe :

Code : Tout sélectionner

onKeyDown="if(liDown(this))return true;else{mafonction();return false;}"