12
votes

Les valeurs de code-clés JavaScript sont "indéfinies" dans Internet Explorer 8

J'ai des problèmes avec du JavaScript que j'ai écrit, mais seulement avec Internet Explorer 8. Je n'ai aucun problème à exécuter cela sur Internet Explorer 7 ou plus tôt ou sur Mozilla Firefox 3.5 ou plus tôt. Il s'exécute également correctement lorsque j'utilise le mode de compatibilité sur Internet Explorer 8.

Ce que je fais est de remplacer la touche Entrée lorsqu'un utilisateur entre une valeur dans une zone de texte. Donc, sur mon élément, j'ai ceci: xxx

, puis j'ai la méthode JavaScript suivante: xxx à nouveau, ceci Tout fonctionne bien avec presque tous les autres navigateurs. Internet Explorer 8 me donne juste du mal.

Toute aide que vous pourriez avoir est grandement appréciée.

Mise à jour: Merci à tous pour vos commentaires rapides. Chris Pebble et Bryan Kyle ont tous deux assisté à cette solution. J'ai récompensé Bryan la "réponse" pour aider à sa réputation. Merci tout le monde!


0 commentaires

8 Réponses :


0
votes

Essayez d'ajouter un événement enkeyup également et appelez la même fonction.

Conseil: Vous pouvez ajouter débogueur; au début de Dosubmit pour définir une pause, vous pouvez examiner le code KeyCode.


1 commentaires

Intéressant, l'événement "OnKeyUp" n'exécute même pas dans ce cas sur Internet Explorer 8.



0
votes

Je pense window.event.keycode fonctionne dans IE8 (je ne peux pas tester maintenant)


0 commentaires

26
votes

On dirait sous l'IE8 The KeyCode Propriété de window.event est non défini mais cette même propriété de window.event / Code> (Notez le minuscule e ) a la valeur. Vous pouvez essayer d'utiliser window.event . xxx


0 commentaires

8
votes

Juste un hunch, essayez ceci:

var keyCode = e.keyCode ? e.keyCode : e.which;


2 commentaires

Cela a travaillé sur Internet Explorer 8, mais n'a travaillé sur aucun des autres navigateurs que ce code a utilisé pour travailler.


Chris, s'il vous plaît voir mon commentaire ci-dessous. Vous adéquat avec Bryan a aidé à résoudre ce problème! Merci encore!



0
votes

ou quelque chose comme ça. Var KeyCode = E.Qui || E.KeyCode;


0 commentaires

1
votes

Je préfère personnellement l'approche multi-clés. Cela permet de détecter plusieurs clés, mais aussi d'une seule clé identique, et cela fonctionne dans chaque navigateur que j'ai testé.

map={}
keydown=function(e){
    e=e||event
    map[e.keyCode]=true
    if(map[16]&&map[191]){//SHIFT+?
        alert('1) Type your username and password\n\n2) Hit Enter to log in')
        map={}
        return false
    }else if(map[13]){//Enter
        alert('Logging in...')
        map={}
        return false
    }
}
keyup=function(e){
    e=e||event
    map[e.keyCode]=false
}
onkeydown=keydown
onkeyup=keyup//For Regular browsers
try{//for IE
    document.attachEvent('onkeydown',keydown)
    document.attachEvent('onkeyup',keyup)
}catch(e){
    //do nothing
}


0 commentaires

3
votes

Cela a fonctionné de cette manière sur mon code:

var kcode = (window.event) ? event.keyCode : event.which;


0 commentaires

2
votes

Essayez ceci:

function checkKeyCode(e){  
    if (!e) e = window.event;   var kCd =  e.which ||  e.keyCode;
    return kCd;
}


0 commentaires