2009-10-02 2 views
0

J'ai une situation où j'ai besoin d'intercepter toutes les clés qui sont enfoncées dans un div contentEditable. Mais quand l'événement KeyPress arrive, si je le fais,Y at-il un événement entre la touche et le clavier en javascript?

document.getElementById("divEditor").innerHTML 

Je ne peux pas obtenir le texte intégral (ne pas le dernier caractère pressé)

En outre, l'événement keyup ne se déclenche pas pour les pressions de touche en continu. Que puis-je faire pour avoir un événement clé qui a la valeur entière?

+0

Il y a aussi le clavier ... pas sûr quand cela se déclenche bien – SeanJA

+0

Vous pourriez faire un moment (l'élément est net) {// faire quelque chose} Je pense ...? – SeanJA

Répondre

1

keyup est le seul événement qui obtient l'état post-keypress.

Une approche consiste à piéger keydown et définir un délai pour faire un peu de traitement après la pression de touche:

input.onkeydown= function() { 
    setTimeout(function() { 
     // do something 
    }, 1); 
}; 

Cependant, s'il est également possible de faire des modifications sans pression d'une touche (et il est généralement, par l'intermédiaire glisser- et-drop et les éléments de menu comme couper-coller), aucun montant de vérification pour les événements clés aidera. Au lieu de cela, vous devez simplement interroger l'état pour voir s'il a changé. Vous pouvez le sauvegarder avec un gestionnaire onkeyup ou un timeout onkeydown pour rendre cette mise à jour plus rapide.

var oldstate= input.value; 
function checkState() { 
    if (input.value!=oldstate) { 
     // do something 
     oldstate= input.value; 
    } 
} 
setInterval(checkState, 1000); 
input.onkeyup= checkState; 

(Celui-ci utilise un élément d'entrée pour la simplicité, mais est également applicable à contentEditable.)

+0

De nos jours, il y a l'événement 'input' dans HTML5, qui est assez bien supporté sur' 'et légèrement moins bien supporté sur'