42 votes

jQuery - keydown () sur div ne fonctionne pas dans Firefox

J'ai l'exemple de code suivant, qui devrait faire apparaître une alerte lorsque la div est au point et qu'une touche est enfoncée. Cela correspond à ce que j'attends dans IE 7, mais pas dans Firefox 3.5.5. Qu'est-ce que je fais mal?

 <html>
<head>
    <title>JS test</title>
    <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#testdiv").keydown(function(event) {
                alert("Pressed " + event.keyCode);
            });
        });
    </script>    
    <style type="text/css">
        #testdiv
        {
            width: 50;
            height: 50;
            background-color: red;
        }
    </style>
</head>
<body>
    <div id="testdiv"></div>
</body>
</html>
 

EDIT : Je viens d'essayer de remplacer keydown par keypress et keyup et ceux-ci ne fonctionnent pas non plus. Incidemment, je me suis également assuré que mon paramètre "Rechercher au fur et à mesure" est désactivé au cas où.

122voto

Richard Points 14490

Vous devez donner à la div un tabindex pour qu’elle puisse recevoir le focus.

 <div id="testdiv" tabindex="0"></div>
 

3voto

Jakob Jenkov Points 304

J'ai obtenu ce qui précède pour fonctionner dans Firefox, comme ceci:

 $('#domainTableDiv').keydown(function(e) {
        alert(e.type + " button(" + e.which + ") ctrl(" + e.metaKey + ") alt(" + e.altKey + ") shift(" + e.shiftKey + ")" );
    });

$('#domainTableDiv').focus();
 

Une fois que la DIV a le focus défini explicitement, les événements clés se déclenchent parfaitement dans Firefox 4.0.1

1voto

Jage Points 4889

Je ne m'attends pas à ce que cela fonctionne, puisqu'un div n'est pas quelque chose qui devrait recevoir des événements clés comme celui-là. Si vous avez placé une <entrée> dans cette div et que l'utilisateur a appuyé sur une touche dans l'entrée elle-même, l'événement s'affichera jusqu'au div et exécutera votre fonction. Je ne suis pas sûr à 100% de ce que fait votre projet, donc je ne sais pas comment vous donner plus de conseils, mais même si je ne devrais pas l'être, je suis un peu surpris que IE soit en train de lancer un événement de keydown un div.

1voto

Avinash Points 65

Nous pouvons également utiliser quelque chose comme ceci:

 $('#tbl tbody').attr("tabindex", 1).focus();
$('#tbl tbody').keydown(function (event) {
    ...
});
 

1voto

Prem Kumar Maurya Points 110

Vous pouvez vérifier en ligne à partir d'ici

Code source

 <html>
<head>
    <title>JS test</title>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#testdiv").keydown(function(event) {
                alert("Pressed " + event.keyCode);
            });
        });
    </script>    
    <style type="text/css">
        #testdiv
        {
            width: 50px;
            height: 50px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div id="testdiv" tabindex="0"></div>
</body>
</html>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X