Je suis en train de mettre en place de l'aide à la saisie pour un utilisateur dans un formulaire. Ici c'est un select avec un nombre assez impressionnant d'options donc j'ai créer une fonction javascript qui aide l'utilisateur à retrouvé l'option qu'il desire en donnant le focus à ce select et en tapant au clavier les premières lettres de l'options.
Tout cela fonctionne très bien avec firefox, pour tester les autres navigateurs j'utilise les identités de konqueror parce que je n'ai pas la possibilité d'acceder à un poste windows pour tester ma fonction avec IE et encore moins un mac pour safari.
Enfin bref ma fonction ne fonctionne avec aucune des identités (même celle de ff) de konqueror je suppose donc que je l'ai mal écrite.
Voici le début de ma fonction :
function find_group (id) {
var element = document.getElementById(id);
var conteneur = document.getElementById('pict');
var timeout;
element.onkeypress = function (event) {//Konqueror ne passe jamais cette étape
clearTimeout(timeout);//reset du timeout
if (event.which) {
var char = event.which;
}
else {
var char = event.keyCode;
}
..
..
..
Je ne met volontairement pas la suite car Konqueror bloque à la ligne
element.onkeypress = function (event) {
Après je en sais pas si ce que j'ai écris est faux mais ff le fait quand même ou si c'est juste une écriture spécifique à ff.
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 15 févr. 2008 à 04:56
ch'tit exemple qui fonctionne avec IE(7), FF,K-Meleon,Opera,Safari...
peut pas dire avec Konqueror, mais pas de raisosn ( euh ? )
<script type="text/javascript">
var chaine ='';
function find_group (sel)
{ sel.onkeyup = function(event)
{ evt = event?event:window.event;
change_group (sel, evt);
}
}
function change_group( sel, evt)
{ var tch=evt.which?evt.which:event.keyCode;
var car = String.fromCharCode(tch);
chaine+=car;
// ajouté pour "voir" ce qui se passe =======
document.getElementById("toto").value=chaine;
// ==========================================
}
</script>
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 15 févr. 2008 à 11:26
onKeyPress (en maintenant une touche appuyée)
Entre en action quand l'utilisateur appuie sur une touche et la maintient appuyée.
onKeyup (en relâchant la touche)
Entre en action quand l'utilisateur appuie sur une touche et la relâche.
pour l'histoire des Majuscules, keyCode et which c'est le n° de touche, pas plus.
maj/ctrl/alt.... ce sont des touches elles aussi
qu'on peut tester "autrement"
+--------------------------------------+
| Exemple |
| Cliquer ici, en appuyant [ ou pas ] |
| sur Alt, et/ou Ctrl, et/ou Shift |
+--------------------------------------+
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 14 févr. 2008 à 14:54
Bonjour,
je ne savais pas très bien comment répondre...
je n'ai pas compris si c'était un problème général ou spécifique à konqueror
sur konqueror je ne pourrais guère t'aider...
si ça plante sur la plupart des navigateurs, on peut regarder...
<hr /> Cordialement Bul
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 14 févr. 2008 à 15:00
si c'est général :
function Touche(evt)
{ var tch=ie?event.keyCode:evt.which;
if ( tch==n° d'ordre de la touche ) // 110, par exemple, c'est le point
{ }
}
...
event = event?event:window.event;
Touche(event);
maelob
Messages postés943Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention 7 août 20093 14 févr. 2008 à 15:03
En le truc c'est que pour que IE accepte passe à l'étape suivante il faut que j'ecrive
element.onkeypress = change_group(event, id);
function change_groupe (e, id) {
//le reste de ma fonction ici
}
Maintenant le truc c'est que ma fonction n'a plus du tout le comportement attendu... car a partir du moment ou je donne le focus a mon select il execute la fonction change_groupe aulieu d'attendre que l'utilise tape sur une touche...
De plus je n'ai pas accès a un poste windows quand je le veux et je ne crois pas que je puisse installé un debuggeur non plus car ce sont des poste ou il y que très peu de droits...
Enfin bref je sais pas trop quoi faire.
Une petit idée? Tu veux voir mes 2 versions de fonctions pour comprendre?
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 14 févr. 2008 à 15:20
c'est IE qui rale ? non ?!?...
var event = event?event:window.event;
element.onkeypress = change_group(event, id);
function change_groupe (e, id) {
var tch=event.keyCode?event.keyCode:e.which;
//on peut traiter tch et document.getElementById(id)
}
enfin.. pas loin ( pas testé ) et si id est ok....
>>Tu veux voir mes 2 versions de fonctions pour comprendre?
quelles 2 versions ?
fais nous plutôt un extrait ( le minimum ) pour voir ce qui se passe
et où ça queute.
( d'ailleurs ça te permettra peut-être de résoudre seulE )
maelob
Messages postés943Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention 7 août 20093 14 févr. 2008 à 15:49
Maintenant c'est ff qui rale je lui declare event après il me dit que c'est pas defini mais bon (c'est pas le plus important je me debrouillerait pour ça) pour IE il l'execute mais quand on donne le focus pas quand il y un onkeypress
voici un exemple pour mon select un truc normal...
<select id = "group0a" name="group0" onFocus="find_group ('group0a');" onBlur="javascript:initialize();">
La fonction qui fonctionne avec ff en raccourcis
//variables globales
var chaine ='';
var j = 0;
function find_group (id) {
var element = document.getElementById(id);
var conteneur = document.getElementById('pict');
element.onkeypress = function(event) {
if (event.which) {
var char = event.which;
}
else {
var char = window.event.keyCode;
}
var character = String.fromCharCode(char);
chaine = chaine+character;
//je vide mon select et recherche les options correspondantes a la chaine entrée les options sont enregistré dans une variable globale
}
}
Et ce que je viens d'ecrire pour que ça fonctionne avec IE en raccourcis aussi
//variables globales
var chaine ='';
var j = 0;
function find_group (id) {
var element = document.getElementById(id);
var event = event?event:window.event;
element.onkeypress = change_group (id, event);
}
function change_group(id, event) {
var conteneur = document.getElementById('pict');
var element = document.getElementById(id);
if (event.which) {
var char = event.which;
}
else {
var char = event.keyCode;
}
var character = String.fromCharCode(char);
chaine = chaine+character;
//je vide mon select et recherche
les options correspondantes a la chaine entrée les options sont
enregistré dans une variable globale
}
Bon maintenant IE ne cherche pas a comprendre si y'a un onkeypress ou pas il execute change_group quand on donne le focus au select... et ff rale car event n'a pas de propriété... en tradusant de l'anglais ;-)
maelob
Messages postés943Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention 7 août 20093 14 févr. 2008 à 17:07
Bon j'ai parcourue ds milliers de kilomètres pour trouver un poste sous windows et j'en ai trouvé un.
Pour ma solution qui fonctionne avec ff, il me dit que which à la valeur nulle ou n'est pas un objet (je comprend pas pourquoi il s'occupe de which) et refuse de faire quoi que ce soit...
Pour l'autre solution ben d'après lui il y a une erreur au crochet fermant de la fonction find_group... donc en faite pas du tout le même comportement que konqueror et son identité IE (c'est bon a savoir d'ailleurs). Konqueror lui execute change_group meme si ya pas touche appuyée...
maelob
Messages postés943Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention 7 août 20093 15 févr. 2008 à 09:35
Il y a des indications dans le formulaire pour que l'utilisateur sache comment faire une recherche. Puis je ne fais que suivre les ordres venant du niveau au dessus de moi ;-) la touche backspace est prise en compte certaines autres sont desactivées.
En tout cas je te remercie je vais regarder ça et je reviens dans la journée ;-)
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 15 févr. 2008 à 09:51
>>je ne fais que suivre les ordres venant du niveau au dessus de moi
d'où que ça vienne, quand c'est pas bon : c'est pas bien ( et lycée de Versailles )
( mais ce n'est que mon avis, qui ne vaut pas grand chose )
<hr /> Cordialement Bul
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 15 févr. 2008 à 10:13
vil plagiat de Pierre Dac qui utilisait ce calembour en lieu et place de "vice versa"
( ça vaut bien mieux en le disant qu'en l'écrivant )
<hr /> Cordialement Bul
maelob
Messages postés943Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention 7 août 20093 15 févr. 2008 à 11:04
J'ai adapté mon code, maintenant je dis f**k konqueror qui l'utilise a part moi? (ça veut pas fonctionner sous konqueror mais on fera sans lui)
Et j'ai un petit truc assez bizard sous ff le caractère se met en majuscule avec onkeyup et se duplique dans ma chaine alors qu'avec onkeypress c'est nickel? Y'a pourtant pas énormement de différence entre les deux non?
Merci beaucoup en tout cas de ton aide. :-)
>>>>Bon aller je me met à bosser un peu.
>>pour gagner plus, il faut bosser plus.
Si je fais des heures sups elles sont pas payée alors je les recupere comme je peux ;-)