Александр Михалицын пишет:Событие как ставишь? attachEvent/addEventListener?
По правде говоря, у меня реализовано несколько проще. Если немного углубиться в подробности, то есть некоторый span, который доступен для редактирования пользователями (атрибут
contentEditable):
CODE:<span contentEditable="true" onKeyDown="mykeydown(event);">Тут текст</span>
Далее следует фунция-обработчик:
CODE:function mykeydown(event) {
if (!event) event = window.event;
if (event.keyCode == 13)
event.returnValue = false;
}
Этот способ работает в IE (по крайней мере в 6-ой его версии)
Проблема в том, что при редактировании текста в span'е в случае нажатия Enter, происходит полная ерунда. IE6 начинает заключать строки в теги <p></p>, в результате чего осуществляется переход не на одну, а на две строки (мне же нужен <br>). В Опере 9 span'ы почему-то начинают размножаться с каждым нажатием Enter. В Опере 10 похожая ситуация
Задача в том, чтобы перехватывать нажатие Enter и не позволять исполняться родительским обработчикам, которые творят эту ерунду. Достаточно будет лишь в дочернем обработчике добавить <br> в span (например, посредством innerHTML)
Сейчас ещё подумал. Ведь текст может быть вставлен и из буфера обмена, и при этом в нём могут быть переходы на новую строку. Видимо, весь алгоритм нужно свести к такой последовательности: сначала получаем обновлённый текст, выполняем необходимые преобразования, а затем отправляем его стандартным обработчикам