2010-12-05 5 views
3

je veux Capturer la touche Entrée pour utiliser un bouton cliquez surCapturer la touche Entrée pour utiliser un bouton cliquez avec le javascript

j'ai ce javascript:

function doClick(buttonName,e) 
    { 
     //the purpose of this function is to allow the enter key to 
     //point to the correct button to click. 
     var key; 

     if(window.event) 
       key = window.event.keyCode;  //IE 
     else 
       key = e.which;  //firefox 

     if (key == 13) 
     { 
      //Get the button the user wants to have clicked 
      var btn = document.getElementById('submit'); 
      if (btn != null) 
      { //If we find the button click it 
       btn.click(); 
       event.keyCode = 0 
      } 
     } 
    } 

avec html

<input type="button" id="submit" value="Search" onClick="doSomeThing();" /> 
<input type="text" name="search" onKeyPress="doClick('submit',event)" /> 

cela fonctionne très bien avec le navigateur IE mais pas avec Firefox,

Pourquoi? Quelqu'un peut-il corriger ce code javascript pour fonctionner sur tous les navigateurs.

merci

+0

Pourriez-vous nous expliquer ce qui se passe? La méthode est-elle appelée du tout? – cwallenpoole

+0

oui du tout. merci – Swell

+0

ce lien vous aidera définitivement http://stackoverflow.com/questions/155188/trigger-a-bouton-cliquez-avec-javascript-sur-le-centre-key-in-a-text-box –

Répondre

7

Vous devriez vraiment pas utiliser des gestionnaires d'événements en ligne:

window.onload = function() { 
    document.getElementById('submit').onclick = doSomething; 
    document.getElementById('search').onkeypress = function(e) { 
     doClick('submit', e); 
    }; 
}; 

function doClick(buttonName,e) 
{ 
    //the purpose of this function is to allow the enter key to 
    //point to the correct button to click. 
    var ev = e || window.event; 
    var key = ev.keyCode; 

    if (key == 13) 
    { 
    //Get the button the user wants to have clicked 
    var btn = document.getElementById(buttonName); 
    if (btn != null) 
    { 
     //If we find the button click it 
     btn.click(); 
     ev.preventDefault(); 
    } 
    } 
} 

Votre code HTML devrait ressembler à ceci:

<input type="button" id="submit" value="Search"/> 
<input type="text" name="search" id="search" /> 
+2

Le fait que l'OP utilise des attributs de gestionnaire d'événement n'est pas pertinent pour la question, et affirmer que l'OP ne devrait pas le faire est dogmatique. Il est parfaitement valide d'utiliser des attributs de gestionnaire d'événements et n'introduit aucun problème fonctionnel. –

+0

ne fonctionnait pas! J'ai fait la fonction de boîte d'alerte à des fins de test. document.getElementById ('submit'). Onclick = getMsg(); mais la boîte d'alerte apparaît immédiatement quand j'ouvre la page et quand je clique sur IE mais ne fonctionne pas avec Firefox aussi! – Swell

+0

@Swell vous devez assigner la référence de la fonction, pas la valeur de retour d'invocation: document.getElementById ('submit'). On click = getMsg; –

2

Pourquoi ne pas utiliser un cadre de js wrapper comme jQuery ? Il fait tout le matériel de cross-browser pour vous. Juste à côté du haut de ma tête, cela pourrait fonctionner (encore, vous devriez probablement vérifier):

jQuery(function(){ 
    jQuery(window).keyup(function(e){ 
    if (e.keyCode == 13) { 
     // handle click logic here 
    } 
    }); 
}); 
+0

Pour quelque chose de simple, vous n'avez pas besoin d'inclure tout le framework jQuery ... – Warty

5

Je suggère d'utiliser l'événement keydown au lieu de ce cas particulier, car il simplifie la détection clé: vous pouvez utiliser keyCode dans tous les navigateurs. En outre, vous passez l'ID du bouton que vous voulez cliquer mais ne l'utilisez pas, donc j'ai changé cela. En outre, j'ai ajouté un return false pour empêcher le comportement par défaut d'appuyer sur la touche Entrée (bien que cette partie n'aura aucun effet dans Opera: vous devrez supprimer l'événement keypress à la place dans ce navigateur):

function doClick(buttonId, e) 
    { 
    if (e.keyCode == 13) 
     { 
     // Get the button the user wants to have clicked 
     var btn = document.getElementById(buttonId); 
     if (btn) 
     { 
      btn.click(); 
      return false; 
     } 
    } 

}

+0

Down mais pas up? J'ai toujours trouvé la version pour avoir une sensation plus intuitive. Est-ce juste votre préférence ou y a-t-il un véritable coup de pouce? (certains navigateurs sont-ils meilleurs/plus rapides avec une baisse que vers le haut?) – cwallenpoole

+0

@cwallenpoole: La raison pour laquelle je suis allé avec 'keydown' était de garder la même expérience utilisateur que dans la question: l'OP utilisait' keypress', qui se déclenche immédiatement après ' Keydown ». En outre, il est d'accord avec le comportement du navigateur natif de soumettre un formulaire lorsque l'utilisateur appuie sur la touche Entrée, qui est déclenchée lorsque la touche est enfoncée plutôt que quand elle est libérée. –

+0

J'ai oublié la méthode .click() et que les formes soumettent sur entrer ne pas entrer. Merci, cela m'a vraiment aidé à sortir d'un mal de tête pour la dernière heure. – pqsk

0

onKeyDown

if (event.keyCode == 13) { 
    document.getElementById('submit').click(); 
    return false; 
} 
Questions connexes