Comment executer le code d'un bouton en appuyant sur une touche?

LionHearth Messages postés 3 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 - 5 oct. 2006 à 17:35
LionHearth Messages postés 3 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 - 10 oct. 2006 à 11:25
Bonjour,

Je cherche à appeler la procédure click d'un bouton en appuyant sur une touche.
Je m'explique... Je dois executer le code d'un bouton annuler en appuyant sur "A" et celui du bouton valider en appuyant sur "V".

j'ai donc pour ce faire écrit une fonction javascript qui intercepte le fait d'appuyer sur ces 2 touches et de renvoyer un message pour me le signaler.

<head runat="server">
    <script language="JavaScript">
       
        function process_keypress()
        {            if (window.event.type "keypress" & window.event.keyCode 118)
            alert("touche V:Valider interceptée.");            return !(window.event.type "keypress" & window.event.keyCode 118);
                        if (window.event.type "keypress" & window.event.keyCode 97)
            alert("touche A:Annuler interceptée.");            return !(window.event.type "keypress" & window.event.keyCode 97);
        }
       
        document.onkeypress = process_keypress;
       
    </script>
</head>

Mon problème c'est que j'aimerais pouvoir appeler le code des bouton a executer au lieu de renvoyer les messages...

Je code dans Visual studio 2005 dans une masterpage. Je n'ai donc pas directement accès aux boutons que je desire appeler puisque ceux ci se trouve dans la partie "content" de la page asp.

Mais je cherche d'abord à pouvoir appeler/executer une procedure dans le code-behind de la page.

Merci d'avance
""Kanjalex""

3 réponses

rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
6 oct. 2006 à 01:08
Salut

A la place de tes alert( ... ) tu peux faire par exemple :

pour ton bouton annuler : document.getElementById(' id de ton bouton annuler').onclick();
pour ton bouton valider : document.getElementById(' id de ton bouton valider').onclick();

cela implique donc que le code a executer soient dans l'attribut onclick de chaque bouton ou qu'il soit externaliser vers d'autres fonctions javascript

dailleurs ta fonction n'interceptera jamais la touche A puisque tu fais un "return" avant....

voici un exemple de ton code résolu :

<html>
<head>
    <script language="JavaScript">
       
        function process_keypress()
        {           if (window.event.type "keypress" & window.event.keyCode 118)
           {
                document.getElementById('valider').onclick();                return !(window.event.type "keypress" & window.event.keyCode 118);
           }           else if (window.event.type "keypress" & window.event.keyCode 97)
          {
               document.getElementById('annuler').onclick();               return !(window.event.type "keypress" & window.event.keyCode 97);
          }
       }
       
        document.onkeypress = process_keypress;
        function annuler()
        {
            alert('annuler');
        }
        function valider()
        {
            alert('valider');
        } 
    </script>
</head>

    
    

</html>

En espérant t'avoir aider.... Bonne prog

-- The Rubik's Man --
0
LionHearth Messages postés 3 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 10 octobre 2006
10 oct. 2006 à 10:59
Merci pour ta réponse tu m'a donné les pistes pour réussir...

Je n'ai pas tout à fait terminé. Et mon problème était un peu plus complexe. Je dois en fait générer un raccourci clavier pour chaque bouton se trouvant dans ma page Asp.net. Pour celà j'ai donc dû générer du code behind qui me permet de recupérer l'ensemble des contrôles bouton de la page en cours. Ensuite je récupère seulement la première lettre du bouton et je retranscris sa valeur en ascii, afin de pouvoir l'intercepter en javascript.. Je ne suis pas loin de la solution mais je gallère encore un peu.

L'idéale consiste ensuite un générer une légende dans la page qui renseigne l'utilisateur des touches qui active les boutons de la page en cours.

Voici Donc le Code behind que j'ai dû écrire pour pouvoir mettre en place l'activation des raccourcis claviers pour les boutons
Code se trouvant dans la masterPage :
const string strKeyCodeBtnName @"if (window.event.type 'keypress' && (window.event.keyCode == char2ascii('{0}') || window.event.keyCode == char2ascii('{1}')) ) ##- document.getElementById('{2}').onclick(); -##";

protected void Page_Load(object sender, EventArgs e)
{
     PutInPage(this);
}

private void PutInPage(Control ctrl)
    {
        foreach (Control subCtrl in ctrl.Controls)
        { 
            //Si btn
            if (subCtrl is Button)
            {
                if (!subCtrl.Visible)
                {

                    subCtrl.Visible = true;
                    if (((Button)subCtrl).Attributes["style"] == null)
                    {
                        ((Button)subCtrl).Attributes.Add("style", string.Empty);
                    }
                    ((Button)subCtrl).Attributes["style"] = "visibility:hidden;";
                   
                }

                litKeyCodeBtnName.Text += string.Format(strKeyCodeBtnName, ((Button)subCtrl).Text.Substring(0, 1).ToUpper(), ((Button)subCtrl).Text.Substring(0, 1).ToLower(),subCtrl.ClientID).Replace("##-", "{").Replace("-##", "}");
              
                Response.Write("<li>" + subCtrl.ID.Substring(3,1) + " : " + subCtrl.ClientID);
            }
            PutInPage(subCtrl);
        }       
    }

Et voici le code que j'ai écris en javascript :

    <form id="form1" runat="server">

        <script language="JavaScript">
   
        function KeyPress()
        {
            var keyPressed;
           
            if (document.all)
            {
                keyPressed = window.event.keyCode;
                keycode = String.fromCharCode(keyPressed);
               
               
               
                //alert(char2ascii('V'));
                //alert(String.fromCharCode(keyPressed));
                //alert(keyPressed);      
               
            }
        }
       
        function char2ascii(cVALUE)
        {
            var aVALUE = '';
            for (i=0;i<cVALUE.length;i++)
            {
                aVALUE += cVALUE.charCodeAt(i);
                //aVALUE += cVALUE.charAt(i)+'='+cVALUE.charCodeAt(i);
            }
            return aVALUE;
        }
      
        </script>

Voilà, l'ensemble fonctionne mais mon problème est que pour le moment quand j'appuie sur la touche du bouton... je passe bien dans le if mais le document.getElementById('{2}').onclick(); ne s'execute pas... si je le remplace par une alert ... je vois bien que ca fonctionne puisaque l'alert s'affiche.

Voilà Tout,
Si quelqu'un connait une réponse..

""Kanjalex""
0
LionHearth Messages postés 3 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 10 octobre 2006
10 oct. 2006 à 11:25
Je pense avoir compris mon problème...

en fait mon bouton est un asp:button. Seulement j'ai remarqué que le source de la page la valeur onclick n'apparaissait pas..
Je n'ai pas un bouton de la forme :
   

<

input type=button id="annuler" onclick="annuler();" value="annuler">
Mais de cette forme là :


    

Je ne vois pas apparaître le paramètre onclick.. Je pense donc que le navigateur n'arrive pas à interpréter le code :




document.getElementById('
_ctl0:ContentPlaceHolder1:btnValider

').onclick()

Si quelqu'un sait comment faire pour pouvoir intégrer le parametre onclick visible dans un bouton Asp pour que celui ci puisse être affiché dans la source de la page html.



En tout cas merci d'avance... je posterais la solution si je trouve.

""Kanjalex""
0
Rejoignez-nous