2011-03-23 4 views
3

Juste une petite question, il me semble faire beaucoup:événement jQuery contraignant avec l'accessibilité à l'esprit - cliquer et keypress

$saveBtn.bind("click keypress", function(e) 
{ 
    if (e.type != "keypress" || e.keyCode == 13) 
    { 
     // Do something... 

     return false; 
    } 
}); 

Yat-il un moyen plus rapide pour se lier à un auditeur « d'action » à un bouton? Je veux toujours m'assurer que mes boutons avec les écouteurs d'événement se déclenchent à la fois sur les clics et sur la touche d'entrée ... il semble que ce soit une chose assez courante à faire, mais qui n'a rien trouvé sur google. Des pensées?

Merci.

Répondre

3

par liaison avec click fera le travail, pas besoin de garder la presse. Example

+0

Je ne l'ai pas réalisé et je ne pense pas essayer ... merci beaucoup! –

+1

Cela fonctionne uniquement pour les éléments avec un support natif du clavier, comme les balises A et les balises Button et autres joyeusetés - cela ne fonctionnera pas, par exemple, pour une balise div. –

0

Si elle fait partie d'un formulaire, vous pouvez simplement écouter l'événement « Soumettre »?

+0

Oui vrai et dans l'exemple ci-dessus, il est, bien que cette forme a plusieurs boutons de soumission, qui se comportent un peu différemment tous (si l'utilisateur a JS activé). Mais je suis toujours à la recherche d'une solution plus générale. –

1

Vous pouvez créer une deuxième fonction qui gère la logique supplémentaire et passez votre fonction en tant que paramètre:

function handleClickAndPress(myfunc) 
{ 
    return function (e) { 
     if (e.type != "keypress" || e.keyCode == 13) { 
      myfunc(e); 
     } 
    }; 
} 

$saveBtn.bind("click keypress", handleClickAndPress(function (e) { 
    // do your stuff here 
})); 
0

L'événement click ne gère pas réellement la pression de touche dans tous les cas, il est le bouton qui est faire fonctionner l'événement click. Lorsque vous utilisez un div avec un attribut tabindex pour le rendre accessible au clavier, le gestionnaire de clic ne se déclenche pas lorsque vous appuyez sur Entrée.

HTML

<div id="click-only" tabindex="0">Submit click only</div> 
<div id="click-and-press" tabindex="0">Submit click and press</div>​ 

jQuery

$("#click-only").click(function (e) { 
    addToBody(); // Only works on click 
}); 

$("#click-and-press").bind("click keypress", handleClickAndPress(function (e) { 
    addToBody(); // Works on click and keypress 
})); 

function addToBody() { 
    $("body").append($("<p/>").text("Submitted")); 
} 

function handleClickAndPress(myfunc) { 
    return function (e) { 
     if (e.type != "keypress" || e.keyCode == 13) { 
      myfunc(e); 
     } 
    }; 
} 

Donc, pour répondre à la question, je ne pense pas qu'il y ait une meilleure façon (qui fonctionne dans tous les cas) autre que yoda2k de solution.