2009-11-22 3 views
1

Comme vous le savez, la plupart des éditeurs de texte enrichi utilisent iframe pour créer un éditeur WYSIWYG. En iframe contient le document qui est en mode conception. Je souhaite capturer l'événement de touche enfoncée lorsque l'utilisateur appuie sur le caractère '@' dans l'éditeur de texte enrichi pour afficher la saisie semi-automatique. Par ailleurs, je ne peux voir aucun événement déclenché en mode conception. Comment puis-je résoudre cette question?Est-il possible de capturer l'événement KeyDown lorsque le document actuel est en mode conception?

Répondre

1

Il est parfaitement possible de capturer tous les événements clés dans les documents avec designMode sous tension, si vous devez utiliser addEventListener sur document dans Firefox (et peut-être d'autres) plutôt que d'assigner votre gestionnaire à document.onkeypress.

Pour capturer l'utilisateur en tapant le caractère '@' (ou en effet tout caractère imprimable), vous devez utiliser l'événement keypress plutôt que keydown.

// Assuming you have a reference to your iframe in a variable called 'iframe': 

function handleIframeKeyPress(evt) { 
    evt = evt || iframe.contentWindow.event; 
    var charCode = evt.keyCode || evt.which; 
    var charTyped = String.fromCharCode(charCode); 
    if (charTyped === "@") { 
     alert("@ typed"); 
    } 
} 

var doc = iframe.contentWindow.document; 

if (doc.addEventListener) { 
    doc.addEventListener("keypress", handleIframeKeyPress, false); 
} else if (doc.attachEvent) { 
    doc.attachEvent("onkeypress", handleIframeKeyPress); 
} else { 
    doc.onkeypress = handleIframeKeyPress; 
} 
+0

Merci. Ça fonctionne bien. Belle publication. –

Questions connexes