Bonjour,
Je cherche � mettre en place un petit script permettant de selectionner un element dans une liste d�roulante (select simple) suivant la chaine tap� au clavier par l'utilisateur. Voici mon code :
Ca fonctionne assez bien sauf que je me heurte a un probl�me li� � la fonction de selection auto de IE qui s'arr�te � 1 seul caract�re. En fait, cela se passe lorsque la liste est d�roul�e, si on tape une suite de caract�re le bon �l�ment est s�lection mais si on tabule (perte du focus sur la liste), c'est l'�lement correspondant � la derni�re lettre tap� au clavier qui est selectionn�e ...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 <html> <head> <title>Liste déroulante éditable</title> <script language="JavaScript" type="text/javascript"> //Variable globale contenant les chaines frappees (par listbox) var tb_chaines_rechfrappe = new Array(); // Gestion de la frappe clavier (fonction à mettre sur l'evt onkeyup de la listebox) : // - select : objet select // - e : objet event function capte_rechfrappe(select,e) { var code = 0; var car = ''; //Récuperation du code de la touche frappee if(parseInt(navigator.appVersion) >=4){ if(navigator.appName == 'Netscape'){ // Pour Netscape, firefox, ... code = e.which; } else { // pour Internet Explorer code = e.keyCode; } } //Si la touche est une lettre ou un nombre on incremente la chaine globale et on lance la selection sur la listebox if((code>=65 && code<=90) || (code>=48 && code<=57)){ car = String.fromCharCode(code); if ((typeof tb_chaines_rechfrappe[select.name])=='undefined') tb_chaines_rechfrappe[select.name] = car; else tb_chaines_rechfrappe[select.name] += car; document.getElementsByName('texte')[0].value=tb_chaines_rechfrappe[select.name]; document.getElementsByName('code')[0].value=code; placeListe_rechfrappe(select); } } //Placement sur la liste : // - select : objet select function placeListe_rechfrappe(select) { var str_chaine = new String(tb_chaines_rechfrappe[select.name]); var elem_select = false; //On parcourt toute la liste d'options for(i=0;i<select.options.length;i++) { var option_text = select.options[i].text; var str_option_text = new String(option_text); str_option_text = str_option_text.toUpperCase(); //Si le debut de la chaine 'text' de l'option correspond a la chaine saisie on selection l'option if((str_option_text.substr(0,str_chaine.length) == str_chaine) && !elem_select) { select.options[i].selected=true; elem_select = true; } } } //Reinitialisation de la chaine de frappe (fonction à mettre sur l'evt onBlur de la listebox) : // - select : objet select function reinit_rechfrappe(select) { tb_chaines_rechfrappe[select.name] = ''; } </script> </head> <body bgcolor="#FFFFFF" text="#000000"> <form name="form"> <select name='selectbox[truc]' onkeyup='javascript:capte_rechfrappe(this,event);' onBlur='javascript:reinit_rechfrappe(this);'> <option>maison</option> <option>miel</option> <option>mariage</option> <option>chien</option> <option>chemin</option> <option>chat</option> <option>etoile</option> </select> <input type=text name='code'> <input type=text name='texte'> </form> </body> </html>
Quelqu'un aurait une id�e pour contourner ce probl�me ?
Merci d'avance.
Partager