CKEditor getEditor() Ошибка, как ее исправить?
<textarea cols="50" id="txt" contenteditable="true" name="editor1" runat="server" rows="10"></textarea>
<script type="text/javascript" src="css-js/ckeditor.js"></script>
<script type="text/javascript">
CKEDITOR.replace('txt', {
});
</script>
Я получаю это err на js:
TypeError: невозможно вызвать метод 'getEditor'
из undefined
Ответы
Ответ 1
Прежде всего, тег contenteditable="true"
полностью недействителен и устарел в вашем случае. Такой атрибут имеет значение только для встроенных экземпляров и, поскольку <textarea>
не является (содержимое) редактируемым, вам это не нужно.
В любом случае (даже если багги) ваш код работает для меня как шарм (fiddle). Как объяснение, ошибка, которую вы видите, возникает, когда нет элемента id
, переданного в CKEDITOR.replace()
, i.e:
<textarea id="foo"></textarea>
<script type="text/javascript">
CKEDITOR.replace( 'bar' ); // <textarea> is #foo, error will be thrown
</script>
Убедитесь, что ваш DOM действителен и <textarea>
существует, когда вызывается CKEDITOR.replace
(работает async?).
Ответ 2
Использование
CKEDITOR.appendTo( 'txt' ); for DOM elements
CKEDITOR.replace( 'textarea' ); for textarea
Хорошо, чувак попробуй это и
функции appendTo и replace все находятся в файле themedui.js
попробуйте добавить его отдельно, вот ссылка
http://docs.ckeditor.com/source/ckeditor.html#CKEDITOR
Ответ 3
если вы просто хотите избавиться от этого, используйте
try{CKEDITOR.replace('body')}catch{}
это заставит CKEDITOR открыться там, где вы хотите
Ответ 4
Проблема может быть в том числе:
<script src="{{ asset('js/app.js') }}" defer></script>
Попробуйте удалить это. Это может решить вашу проблему
Ответ 5
У меня была похожая проблема, и я решил ее следующим образом:
<script src="/vendor/unisharp/laravel-ckeditor/ckeditor.js"></script>
<script>
if($("textarea").length > 0){
CKEDITOR.replace( 'ckeditor' );
}
</script>
Ответ 6
Это правильный способ сделать это (я нашел этот метод, проверив администратора django)
var textAreaEl = document.getElementById("id_html_txt")
var textAreadData = textAreaEl.dataset.config
var textEditor = CKEDITOR.replace(textAreaEl, textAreadData);
textEditor.insertHtml(textAreaEl)
- Выше конфигурация для модальной формы, но будет работать и для нормальной формы
Ответ 7
используйте setInterval. Это, вероятно, потому что DOM еще не загружен.
var interval = setInterval(function () {
if (document.getElementById('txt')) {
CKEDITOR.replace('txt');
clearInterval(interval)
}
}, 100)