Как назначить событие html-элементу?
Вопрос по теории(а может и по практике):
Как назначить событие html-элементу <iframe>, которое ему не "свойственно"? А ситуация такая: решил висивиг-редактор простенький сам написать, только через <iframe> и <textarea> в тупик зашел, и решил написать собственную функцию обработчик, который бы вызывался по событию keydown и добавлял к значению через innerHtml нажатую букву. Только проблема в том, что события клавиатуры "keydown" поддерживают только элементы формы. Можно ли искуственно назначить событие? |
Для создания WYSIWYG-редакторов используют iframe, у которого выставлено свойство document.designMode = "On"; ("on" для Gecko) или элемент (работает не во всех браузерах) с contentEditable = true. События нажатия клавиш отлавливаются на document вашего iframe.
|
Я про это читал, только мой редактор пока еще до этого "недожил". Я на этапе ввода символов застрял. И сделать я его хочу, кстати, как раз через <iframe>. Я спрашивал, можно ли как то добавить событие к <iframe>. Мануалы говорят, что у этого узла только события onload, onresize, onunload. А я хочу искусственно навязать событие keydown, так, чтобы при фокусе на <iframe> и нажатии клавиши, её значение присваивалось html содержанию этого фрейма
|
Цитата:
Цитата:
var iframe = document.getElementById("идентификатор_фрейма"); var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; iframeDocument.designMode = "On"; iframeDocument.onkeypress = function(e) { … }; Ввод символов позволяет сам браузер, когда вы переводите документ в designMode. |
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; - Это мы устраняем различие между IE и DOM2-совместимыми браузерами? (Это так, кой какие мысли проверить) |
Не помню точно, между старой Оперой и другими браузерами вроде.
|
Все вроде заработало, обработчики переприсваиваются, только с установлением designMode в "On" все, что я хотел сделать, стал выполнять сам броузер (т.е. зря я мозг себе парил :( )
Octane, а как можно присвоить ему значение (<iframe>)? Я пробовал с помощью .innerHtml и write(), а также .value, и чет не получается |
iframeDocument.body.innerHTML = "тарам пам пам"; |
Я думаю, стоит немного описать ситуацию: я написал (вернее нашел и под себя изменил) скрипт замены обработчиков событий, т.е. при возникновении события (в моем случае keydown) в качестве обработчика (и вместо него) вызывается моя функция, которой передается 3 аргумента: html-элемент target, в котором данное событие произошло, значение клавиши chars, которая сгенерировала это событие и объект event, содержащий дополнительные параметры этого события.
Так вот, если прописать в моей функции: target.body.innerHTML +=chars ; желаемого результата это не приносит. Похоже, в target приходит что-то не то, т.е. должен как раз быть элемент document.getElementById("идентификатор_фрейма").contentDocument.body; Как можно проверить, что там приходит? |
Например, вывести с помощью alert :)
|
Часовой пояс GMT +3, время: 16:27. |