Всякий раз, когда мой сценарий вызывает setData или меняет режим («источник», «WYSIWYG»), прослушиватели для назначенных мной событий больше не вызываются.
Исследования показали мне почему, и я экспериментировал с предлагаемыми решениями (CKEDITOR.setData предотвращает присоединение событий с функцией .on), в том числе из официальной документации (http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDom), но ни одно из разрешений не работает для меня, как указано в документации, и я понятия не имею, почему.
Кому-нибудь еще здесь удалось решить эту проблему? Если да, то буду очень благодарен узнать как.
В настоящее время мы используем версию 4.5.10 CKEditor.
Благодарим вас заранее. Кен.
Пример:
// Works until setData() is called or until the view mode is changed ("WYSIWYG", "SOURCE).
ev.editor.document.on( 'keydown', function( evt )
{
console.log("Key Down");
});
// This appears to be the recommended resolution however, this does not
// work for me even prior to setData() being called of the view mode being changed.
editor.on( 'contentDom', function() {
var editable = editor.editable();
editable.attachListener( editor.document, 'keydown', function() {
console.log("Key Down"); // Never executed
} );
} );
ОБНОВЛЕНИЕ: это решение (предложенное Декелем) выглядит так, как будто оно должно работать. Однако я подозреваю, что не реализовал его правильно, поэтому событие Key Down не срабатывает. Любые мысли по этому поводу:
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].on('contentDom', function() {
CKEDITOR.instances[i].document.on('keydown', function(event) {
console.log('key down')
});
});
}
ОБНОВЛЕНИЕ: пример полного кода. Событие больше не срабатывает:
<html>
<textarea name="editor1">
</textarea>
<textarea name="editor2">
</textarea>
<textarea name="editor3">
</textarea>
</html>
<script>
CKEDITOR.replace( 'editor1', {
allowedContent: true
});
CKEDITOR.replace( 'editor2', {
allowedContent: true
});
CKEDITOR.replace( 'editor3', {
allowedContent: true
});
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].on('contentDom', function() {
CKEDITOR.instances[i].document.on('keydown', function(event) {
console.log('key down')
});
});
}
</script>