Я ищу javascript-решение для следующей проблемы. Я использую CKEditor на своем веб-сайте, но думаю, что это неактуально. Потому что я думаю, что это встроенная функция, а не функция CKEditor.

Я хочу отключить перемещение выделенного текста в редакторе. Пользователь должен иметь возможность перемещать выделенный текст в редакторе, это не может быть отключено.

Единственное, что я хотел бы отключить, - это перемещение выделения. Или лучше капля выделения.

0
Spons 18 Мар 2013 в 21:15
Я искал в Интернете, google, stackoverflow. Но я действительно не знаю, с чего начать. Какое событие это обрабатывает? Начать?
 – 
Spons
18 Мар 2013 в 21:19
Можешь объяснить, зачем тебе это нужно?
 – 
23tux
18 Мар 2013 в 21:20
Вожу отслеживать изменения функционала. и я не могу найти способ отследить эти изменения.
 – 
Spons
18 Мар 2013 в 21:21
И везде, где я ищу в сети, я продолжаю останавливаться на одном и том же перемещающемся элементе ... и они объясняют вещи / события как выходящие из элемента. Но если вы переместите выделение текста, то есть элемент, TextNode или часть текстового узла, тогда мне не нужны такие события, как перетаскивание? или я не прав?
 – 
Spons
18 Мар 2013 в 21:23
Не могли бы вы просто привязать к событию изменения элемента для отслеживания изменений?
 – 
MrGrigg
18 Мар 2013 в 21:32

1 ответ

Лучший ответ

Используйте событие ondrop.

myEditor.ondrop = function preventDrop (e) {
    e.preventDefault();
};

jsfiddle.net/PHgdZ

Но если отслеживание изменений - это то, что вам на самом деле нужно, нет необходимости предотвращать перетаскивание. Просто используйте событие ondrop, чтобы отследить изменение. А для новых браузеров просто используйте oninput. Это обнаружит изменения независимо от метода ввода.

jsfiddle.net/PHgdZ/1

1
gilly3 18 Мар 2013 в 21:38
Событие oninput, к сожалению, не поддерживается в -IE9, и клиент любит получать поддержку до IE7. Но помимо этого oninput похож на onchange в одном из комментариев выше, полное решение, которое мне не нужно. Хотя спасибо за идею. Событие ondrop - это именно то, что я ищу. Лично я бы расширил ваше решение с помощью editor.ondragstart = function (e) {e.preventDefault (); }; Чтобы не дать вашему клиенту представление о возможности. jsfiddle.net/PHgdZ/2
 – 
Spons
19 Мар 2013 в 16:51
И не только ввод будет отслеживаться, но и удаления должны отслеживаться. Поэтому ни oninput, ни событие onchange, как в комментарии MrGrigg, не будут полезны. Потому что теперь мне нужно найти в onDragStart то, что выбрано, и пометить его как удаленное. После этого мне нужно дождаться вставки. и если он не упал в текстовую область. последний отмеченный удаленный текст будет отменен. Но пока я держусь за предотвращение, чтобы спастись. Новая функция в следующей версии;)
 – 
Spons
19 Мар 2013 в 16:56
1
- Да, ondragstart - это логическое расширение, которое, безусловно, может повысить удобство использования. Вместо того, чтобы полностью отменять событие, может быть лучше просто установить cursor: no-drop для editor во время ondragover и сбросить курсор во время ondragleave. Таким образом, он дает пользователю визуальную подсказку о том, что падение недоступно, но не наносит вреда браузеру.
 – 
gilly3
19 Мар 2013 в 22:15
- oninput не похож на onchange, который запускается, когда элемент управления теряет фокус. oninput запускается каждый раз, когда значение изменяется, даже если он находится в фокусе. oninput также отличается от событий onkey* тем, что он не запускается, например, при нажатии клавиш со стрелками. И oninput, и onchange запускаются для удаления, но никогда не ondrop. И ondragstart не обязательно означает удаление. Если вы реализуете стек отмены, я бы использовал oninput с постепенной деградацией. Чтобы просто показать изменения, используйте onchange и алгоритм сравнения, такой как jsdiff Джона Ресига.
 – 
gilly3
19 Мар 2013 в 23:12
Я никогда не говорил, что они равны. Я говорил о том, что это полное решение для детали, которую я не ищу. поэтому я сказал, что это похоже на идею onchange в одном из постов выше. Кроме того, я никогда не собирался делать стопку отмены. потому что стек отмены уже существует в CKEditor. Стек отмены - это полное решение для всех отмен, и я делаю гораздо больше действий, чем это. Но не волнуйтесь ... вот почему я сказал, что это что-то для следующей версии. потому что у меня нет времени исследовать это.
 – 
Spons
20 Мар 2013 в 12:02