listes avec sélection via les premières lettres et événement
Posté : 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 :
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?
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);">
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?