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

d0m
Mammouth du PHP | 1141 Messages

15 févr. 2008, 10:37

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?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 févr. 2008, 11:39

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 ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

d0m
Mammouth du PHP | 1141 Messages

15 févr. 2008, 15:52

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 févr. 2008, 16:42

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 ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

d0m
Mammouth du PHP | 1141 Messages

15 févr. 2008, 17:08

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;}"