IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Petit problème sous Firefox onkeydown


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut Petit problème sous Firefox onkeydown
    Bonjour à tous,

    Avant tout, je précise que je développe en ASP .NET1. Mais que je suis obligé de passer par du javascript pour contourner une limitation de l'asp .net1 (fonctionnalitée qui est dans le .net2).


    Explication;

    J'ai un formulaire, avec différents input text, buttons submit,...

    lorsque l'utilisateur se trouve dans un input text et qu'il appuie sur "Enter", alors le browser click sur le bouton se trouvant le plus "proche" de cette zone de texte.

    J'ai trouvé sur le net un petit code javascript qui permet de spécifier quel bouton sera cliqué lorsque l'utilisateur appuie sur "Enter".

    La fonction va très bien sous IE, et ne donne rien sous FireFox. J'ai éssayé de faire une version Firefox, en m'inspirant de la FAQ, mais je rencontre diverses erreurs.

    Voici le code:
    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
    <SCRIPT language='javascript'>
    function fnTrapKD(e,btn){
    if(parseInt(navigator.appVersion) >=4)
    {
    	if(navigator.appName == 'Netscape')
    	{
    		if(e.which==13)
    		{
    			e.returnValue=false;
    			alert('ff');
                		e.cancel = true;
    			document.getElementById(btn).click();
    		}
    	}
    	else
    	{ 
    		if (event.keyCode == 13)
    		{
    			event.returnValue=false;
    			alert('ie');
               		event.cancel = true;
    			btn.click();
    		}
    	}
    }
    }
    </SCRIPT>
    Firefox arrive bien dans le bon if lors de l'appui sur la touche Enter...le code fautif est donc celui-ci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    e.returnValue=false;
    e.cancel = true;
    document.getElementById(btn).click();
    Premiere question comment annuler l'évenement en cours?
    Instinctivement j'ai fait comme pour IE avec returnValue=false et cancel = true sur l'évenement e puisque firefox ne reconnait pas event

    Ensuite il doit y avoir un problème avec mon getElementById puisque Firefox me donne cette erreur:
    Error: document.getElementById(btn) has no properties
    J'ai éssayé aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(btn.value).click();
    C'est pareil, je ne comprend pas pourquoi il ne reconnait pas btn comme une variable.


    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    On peut voir l'endroit où tu appelles ta fonction "fnTrapKD" ?

  3. #3
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut
    Alors ca se fait en ASP mais c'est facilement compréhenssible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objTextControl.Attributes.Add("onkeydown", "fnTrapKD(event,document.all."+ objDefaultButton.ClientID+ ")");
    Il ajout un attribut onkeydown sur la textbox (input text) objTextControl, et lui demande d'apeller la fonction fnTrapKD en lui passant event + l'identifiant du bouton à cliquer.


    Alors j'ai lu pas mal de truc sur le document.all, qui ne serait pas reconnu par firefox, ou uniquement en partie, mais si je ne l'utilise pas, impossible de retrouver mon bouton.

    L'id du bouton est généré par ASP et ca donne quelque chose du genre:
    _ctl1_RouteRequest1_RouteRequestStartSearch

    L'appel complet une fois compilé en html donne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="_ctl1:RouteRequest1:RouteFieldEntry" type="text" maxlength="40" id="_ctl1_RouteRequest1_RouteFieldEntry" tabindex="1" class="txt_input" onkeydown="fnTrapKD(event,document.all._ctl1_RouteRequest1_RouteRequestStartSearch)" style="width:300px;" />
    Joli hein?

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    document.all n'est pas du tout reconnu par Firefox, donc c'est normal que ça ne fonctionne pas dessus.

    Il faut qu'une fois compilé tu aies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onkeydown="fnTrapKD(event,this.id)"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onkeydown="fnTrapKD(event,document.getElementById('_ctl1_RouteRequest1_RouteFieldEntry').id)"

  5. #5
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut
    Ok merci, je dois partir mais j'éssaye ca demain matin

  6. #6
    Membre confirmé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Points : 511
    Points
    511
    Par défaut
    pour finir...

    J'ai remplacé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(btn).click();
    Par
    Je pensais que FireFox était alergique à ce genre de pratiques (ne pas utiliser getElementById). Enfin le problème était que firefox éssayait de me trouver l'élément 'btn' et non pas le nom contenu dans la variable btn....


    Enfin ca fonctionne pour l'instant, il faudra que je test sous Firefox 2.

    Décidement les développeurs Web ont de plus en plus de boulot, entre ie6, firefox1, ie7, firefox 2,Opera, Conqueror, ie sous Mac ,....

    Merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sous Firefox display none / block
    Par jeromed dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 05/02/2010, 17h08
  2. Réponses: 1
    Dernier message: 22/08/2007, 09h38
  3. Petit bug sous firefox !
    Par Joe-La-Boule dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 17/01/2007, 21h24
  4. Problème sous Firefox, avec les images.
    Par Sangodams dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2006, 18h44
  5. XSLT multiples côté client, problème sous firefox
    Par elnarc dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/04/2006, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo