Javascript 未定义CKEditor UI空间

Javascript 未定义CKEditor UI空间,javascript,jquery,ckeditor,Javascript,Jquery,Ckeditor,当我尝试运行ckeditor函数时,editor.ui.space被设置为null 我用ajax导入我的内容,无论成功与否,我都会将html插入dom,然后我会尝试用默认选项绑定编辑器 例如: $.get('url', function(data){ $('body').html(data.content); $('textarea.content').ckeditor(); }); 由于未设置ui空间,这会立即消失。我不知道为什么,但是如果我设置了一个超时,比如500,然后运

当我尝试运行
ckeditor
函数时,
editor.ui.space
被设置为
null

我用ajax导入我的内容,无论成功与否,我都会将html插入dom,然后我会尝试用默认选项绑定编辑器

例如:

$.get('url', function(data){
    $('body').html(data.content);
    $('textarea.content').ckeditor();
});
由于未设置ui空间,这会立即消失。我不知道为什么,但是如果我设置了一个超时,比如500,然后运行ckeditor函数,它就可以正常工作了

$.get('url', function(data){
    $('body').html(data.content);
    var t = setTimeout(function() {
        // This does work fine with no problems, why?
        $('textarea.content').ckeditor();
        clearTimeout(t);
    }, 500);
});

为什么在将其插入dom后,它不起作用…

jquery
html
函数是同步的,但加载内容仍然需要时间,并且在调用
$('textarea.content').ckeditor()时有时还不可用

请尝试此操作而不是超时,以确保在初始化ckeditor之前内容可用,超时是一种解决方案,但它不是一种可靠的解决方案

$.get('url', function(data){
    $('body').html(data.content).promise().done(function() {
         $('textarea.content').ckeditor();
    });

});

在Laravel中,我注意到如果我在head部分省略或禁用app.js脚本,这个问题就不会出现

看头部部分并找出答案

<script src="{{ asset('js/app.js') }}" defer></script>

现在删除或评论它

//<script src="{{ asset('js/app.js') }}" defer></script>
//
请注意: 如果在页面中使用vue.js,则需要app.js脚本。如果是这样,你必须找到替代的解决方案

我不使用vue.js,所以我会毫不担心地删除它

注意:


我知道,这不是一个成熟的答案。但它可以帮助其他人找到真正的解决方案。

我今天也遇到了同样的问题

就我而言,我只是改变一下:

<script src="{{ asset('js/app.js') }}"defer></script>

致:


在使用AngularJS和JQuery的网站上,我也遇到了同样的问题。似乎只要在JQuery“document.ready()”指令中初始化CkEditor(版本4…)就可以解决这个问题,以确保它是最后一个运行的Javascript库

<script language="javascript" >
$(document).ready(
    function()
    {
        CKEDITOR.replace( 'editor' );
    }
 );
 </script>

$(文件)。准备好了吗(
函数()
{
CKEDITOR.replace('editor');
}
);

尝试使用
console.log(editor.ui)
使用浏览器的开发者工具,查看console选项卡并查看
ui
对象属性,以查看它是否具有
space
属性或类似属性,以帮助您查看问题。space是一种功能,不是吗@价格昂贵但没有,它没有任何空格属性,我在其他页面上的其他属性也没有,它们工作得很好。抱歉,是的,javascript中的很多东西都是对象,包括函数,所以我使用了object这个词。您得到的错误显示调用space函数的结果返回null。您正在调用的
space
函数似乎是
ui
对象的一部分,而不是任何space插件。这就是函数的作用:在我看来,它只是按名称搜索编辑器的ui,但找不到。好吧,缩小范围,我能做些什么来修复它?我不知道它为什么不起作用:(@pricey如果能看到代码的其余部分会很有用,我的想法是,这与初始化编辑器空间的代码顺序有关……但可能是其他原因,例如,在无法访问的框架集内或其他原因。不幸的是,这也不起作用:(promise不是只与fx相关吗?@ShannonHochkins。promise可以在上面的示例中使用,但我想这取决于您使用的jQuery的版本。我不确定您的情况下发生了什么,可能您的问题是由上面没有显示的一些其他代码引起的,因为必须使用超时仍然向我表明g在初始化ckeditor的适当时间不可用。这肯定很奇怪,在我运行任何操作之前,我正在检查textarea的长度,所以它应该在dom中,这样ckeditor绑定到它就不会有问题了,对吗?肯定很奇怪:(@ShannonHochkins是的,它肯定不仅仅是绑定到的标记。是否还有其他异步加载的依赖项?虽然此代码片段可能是解决方案,但确实有助于提高您文章的质量。请记住,您是在回答将来读者的问题,以及这些人的问题ht不知道您的代码建议的原因。在laravel中,必须在ckeditor.js之前包含app.js
<script src="{{ asset('js/app.js') }}"></script>
<script language="javascript" >
$(document).ready(
    function()
    {
        CKEDITOR.replace( 'editor' );
    }
 );
 </script>