Я строю систему CMS, где я использую jQuery и CKEditor для редактирования встроенного контента. Когда редактор размывается, пользователю предлагается подтвердить, что он хочет отменить изменения. Если выбрано «нет», событие размытия должно быть отменено, и редактор сохраняет фокус, не изменяя позицию курсора. Поскольку мне кажется, что это невозможно, я пытаюсь переориентировать редактор после размытия. Следующий фрагмент кода из обработчика размытия события:Refocus CKEditor при правильной позиции курсора
var $this = $(this);
if (confirm('Discard your changes?')) {
$this.html($this.data('previous'));
} else {
// Optimally prevent the blur event, but alternatively
// reintroduce focus at correct position...
$this.data('editor').focus();
}
Обратите внимание, что focus
вызов делается на экземпляре редактора, содержащегося в $this.data('editor')
, но результат кажется, то же самое, как если бы я сделать это прямо на $this
.
Проблема с этим решением заключается в том, что, хотя он снова вводит фокус, курсор теперь расположен в начале текста, что очень неинтуитивно и раздражает конечного пользователя, который не думал, что ничего не изменилось. С другой стороны, просто отказаться от фокуса не является вариантом, так как я бы не хотел, чтобы пользователь мог предотвратить сброс содержимого, а затем продолжать делать другие изменения, думая, что изменения сохраняются.
Поэтому я хотел бы найти решение, в котором я могу либо предотвратить размытие, либо снова ввести курсор в его последнюю позицию.
Это работает блестяще, спасибо вам большое! В случае, если кому-то интересно, я все еще сохраняю старый контент как данные DOM, устанавливая «var $ this = $ (editor.element. $);». –
Это, похоже, больше не работает с версией 4.4.8 – Clawfire