2009-11-22 1 views
1

Как вы знаете, большинство текстовых редакторов используют iframe для создания WYSIWYG-редактора. В iframe содержится документ, который находится в режиме разработки. Я хочу захватить ключевое событие, когда пользователь нажимает символ «@» в текстовом редакторе для отображения для него автозаполнения.Возможно ли захватить событие KeyDown, когда текущий документ находится в режиме разработки?

Между прочим, я не вижу никакого события в режиме разработки. Как я могу решить этот вопрос?

ответ

1

Это вполне возможно, чтобы захватить все ключевые события в документах с designMode включен, хотя вы должны использовать addEventListener на document в Firefox (и, возможно, другие), а не назначение обработчика для document.onkeypress.

Чтобы захватить пользователя, набрав символ «@» (или, действительно, любой печатный символ), вы должны использовать событие keypress, а не 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

Спасибо. Он работает нормально. Хороший пост. –