2010-12-08 19 views
1

Je veux désactiver backspace dans un de mes inputfields j'ai donc écrit le jquery suivant:jquery + ie8: le retour arrière n'est pas détecté?

$("#noBackspacesHere").keypress(function(e){ 
      if(e.which == "8"){ 
       return false; 
      } 
     }); 

Cela fonctionne bien dans Firefox, mais ne semble pas fonctionner dans IE8. J'ai déjà lu que .keyCode a des problèmes, c'est pourquoi j'ai choisi .which.

Répondre

2

Je viens joué avec les événements de clavier et keydown vous aider ici:

$("#noBackspacesHere").keydown(function(e) { 
    if (e.which == 8) { 
     return false; 
    } 
}); 

Exemple: http://jsfiddle.net/jonathon/7xBRf/

Je l'ai typeof(e.which) et il a dit qu'il est un numéro, de sorte que vous n'avez pas besoin les citations autour d'elle. J'ai testé cela dans IE8, Chrome et FF et cela semble fonctionner pour eux.

+1

Correct, curieusement, Backspace ne déclenche pas un événement de pression de touche dans IE. –

+1

Merci, assez surpris que le retour arrière ne déclenche pas un événement de pression dans IE. – jack

3

@Jonathon Le code de Bolster ne fonctionne pas pour Opera.

Ceci devrait fonctionner dans Opera, IE, FF et Chrome.

$("#noBackspacesHere").bind("keypress keydown", function(e) { 
    if (e.which == 8) { 
     e.preventDefault(); 
    } 
}); 

En outre, e.which est le meilleur moyen de vérifier les codes clés parce que jQuery normalise l'objet événement afin que which sera toujours présent, peu importe quel navigateur que vous utilisez.

+0

En effet. Pourquoi ajoutez-vous cependant le e.preventDefault()? Puisque vous utilisez return false cela semble redondant puisque false a cette fonctionnalité + stopPropagation? – jack

+0

Je n'ai jamais aimé la méthode "return false", elle me semble hackish, bien que valide. PreventDefault se sent plus poli, et je pense qu'il pourrait avoir d'autres effets positifs. Pour votre question, utilisez l'un ou l'autre, la redondance ici n'est pas nécessaire –

+0

@jack: C'est une bonne question et après avoir regardé ça, j'ai réalisé que je l'utilisais incorrectement. L'utilisation de 'e.preventDefault();' continue l'exécution après cette ligne jusqu'à la fin de la fonction. Mon intention avec 'return false;' était d'arrêter la fonction de continuer, cependant, selon [this] (http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/) et ce que vous avez dit, il arrête la propagation ainsi que la prévention des comportements par défaut. Je ne savais pas que jQuery traitait ça comme ça. Donc, oui, dans ce cas, vous n'avez pas besoin de 'return false;'. –