2013-02-27 1 views
0

Мне нужно поймать событие keydown для кнопки delete/backspace. Проблема заключается в том, что каретка находится в начале или конце тега/блока. В этом фильме мне нужно поймать букву предыдущего/следующего блока/тега.Ловля удаленной буквы в CKEDITOR 4.0

Но для начала я не могу узнать, как переместить мой диапазон до последней буквы предыдущего блока? я уже пытался переместить его с помощью:

var element = range.getPreviousNode(); // This returns a Text-Node 
range.moveToElementEditablePosition(element,true); // This gives a error 

The сай Error: Ошибка типа: ч является нуль ckeditor.js (строка 364) Но я думаю, что это происходит потому, что вы не можете переместить фокус на текст узел?

Вопрос в том, как можно поймать письмо, которое собирается удалить? Не прерывая рабочий процесс CKEDITOR. Это так, что мне не нужно строить логику переключения между блоками/тегами.

ответ

0

Магазин editor.edtaible().getText() на каждое событие key и сравнить его с предыдущим значением с помощью некоторого алгоритма. Это чувствует себя хорошо: https://code.google.com/p/google-diff-match-patch/

Причина в том, что в некоторых случаях backspace/delete удаляет более одной буквы, например. когда карет после некоторого элемента блока (весь блок будет удален), или есть много выделенного текста. Кроме того, система позиционирования каретки в CKEditor непредсказуема (браузеры ошибочны и непредсказуемы), и ваш путь может привести вас к неприятностям.

+0

Я думал об этом решении, но это тяжело, потому что текстовые файлы, которые мне нужно сравнивать, могут быть очень большими .. и сравнить его при событии keydown может остановить мое приложение. Или отпугнуть моих клиентов. Я все понимаю, что вы рискуете понять и использовать непредсказуемую систему позиционирования в CKEditor. я хотел бы узнать, где разработчики CKEditor обрабатывают это событие удаления – spons

+0

Но это действительно решение. Я попробую, и если он не покажет большие задержки, я буду использовать его. – spons

+0

«это событие удаления» - нет события удаления. Удаление содержимого осуществляется браузером, и вы не можете подключать к нему слушателей. Вот почему это так сложно. – oleq