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)