Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.09.2009, 13:45
Jony X
 
Сообщений: n/a

Как назначить событие html-элементу?
Вопрос по теории(а может и по практике):
Как назначить событие html-элементу <iframe>, которое ему не "свойственно"? А ситуация такая: решил висивиг-редактор простенький сам написать, только через <iframe> и <textarea> в тупик зашел, и решил написать собственную функцию обработчик, который бы вызывался по событию keydown и добавлял к значению через innerHtml нажатую букву. Только проблема в том, что события клавиатуры "keydown" поддерживают только элементы формы. Можно ли искуственно назначить событие?
Ответить с цитированием
  #2 (permalink)  
Старый 12.09.2009, 15:32
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Для создания WYSIWYG-редакторов используют iframe, у которого выставлено свойство document.designMode = "On"; ("on" для Gecko) или элемент (работает не во всех браузерах) с contentEditable = true. События нажатия клавиш отлавливаются на document вашего iframe.

Последний раз редактировалось Octane, 12.09.2009 в 15:34.
Ответить с цитированием
  #3 (permalink)  
Старый 12.09.2009, 16:04
Jony X
 
Сообщений: n/a

Я про это читал, только мой редактор пока еще до этого "недожил". Я на этапе ввода символов застрял. И сделать я его хочу, кстати, как раз через <iframe>. Я спрашивал, можно ли как то добавить событие к <iframe>. Мануалы говорят, что у этого узла только события onload, onresize, onunload. А я хочу искусственно навязать событие keydown, так, чтобы при фокусе на <iframe> и нажатии клавиши, её значение присваивалось html содержанию этого фрейма
Ответить с цитированием
  #4 (permalink)  
Старый 12.09.2009, 16:33
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Jony X
Я спрашивал, можно ли как то добавить событие к <iframe>
Сообщение от Octane
События нажатия клавиш отлавливаются на document вашего iframe.
iframe создает внутреннее окно, доступ к которому нужно получить:
var iframe = document.getElementById("идентификатор_фрейма");
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

iframeDocument.designMode = "On";

iframeDocument.onkeypress = function(e) {
    …
};

Ввод символов позволяет сам браузер, когда вы переводите документ в designMode.
Ответить с цитированием
  #5 (permalink)  
Старый 13.09.2009, 14:14
Jony X
 
Сообщений: n/a

var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

- Это мы устраняем различие между IE и DOM2-совместимыми браузерами? (Это так, кой какие мысли проверить)
Ответить с цитированием
  #6 (permalink)  
Старый 13.09.2009, 15:11
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Не помню точно, между старой Оперой и другими браузерами вроде.
Ответить с цитированием
  #7 (permalink)  
Старый 15.09.2009, 14:42
Jony X
 
Сообщений: n/a

Все вроде заработало, обработчики переприсваиваются, только с установлением designMode в "On" все, что я хотел сделать, стал выполнять сам броузер (т.е. зря я мозг себе парил )

Octane, а как можно присвоить ему значение (<iframe>)?
Я пробовал с помощью .innerHtml и write(), а также .value, и чет не получается
Ответить с цитированием
  #8 (permalink)  
Старый 15.09.2009, 16:30
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

iframeDocument.body.innerHTML = "тарам пам пам";
Ответить с цитированием
  #9 (permalink)  
Старый 15.09.2009, 18:57
Jony X
 
Сообщений: n/a

Я думаю, стоит немного описать ситуацию: я написал (вернее нашел и под себя изменил) скрипт замены обработчиков событий, т.е. при возникновении события (в моем случае keydown) в качестве обработчика (и вместо него) вызывается моя функция, которой передается 3 аргумента: html-элемент target, в котором данное событие произошло, значение клавиши chars, которая сгенерировала это событие и объект event, содержащий дополнительные параметры этого события.
Так вот, если прописать в моей функции:
target.body.innerHTML +=chars ;

желаемого результата это не приносит.
Похоже, в target приходит что-то не то, т.е. должен как раз быть элемент
document.getElementById("идентификатор_фрейма").contentDocument.body;


Как можно проверить, что там приходит?
Ответить с цитированием
  #10 (permalink)  
Старый 15.09.2009, 19:13
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Например, вывести с помощью alert
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать событие после события определенного в onchange Наталья Events/DOM/Window 2 12.09.2009 13:51
какое событие возникает во время формирования html IT-AleX Events/DOM/Window 2 20.02.2009 16:13
Как имитировать событие мыши Andrey_V Общие вопросы Javascript 4 10.11.2008 16:39
На входе HTML получить на выходе просто текст, как? Dmitry Общие вопросы Javascript 2 25.08.2008 10:42
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40