2011-04-12 69 views
15

我在CKEditor 3.4.1的instanceReady事件中设置焦点时遇到问题。我已经尝试了以下两种方式,但他们都不是一直工作。CKReitor .focus()在instanceReady事件不起作用

CKEDITOR.on('instanceReady', function(e) { CKEDITOR.instances.editor1.focus(); }); 


CKEDITOR.replace('editor1', 
{ 
    on : 
    { 
     instanceReady : function(ev) 
     { 
      ev.editor.focus(); 
     } 
    } 
}); 
+2

为什么给定的解决方案,为你没有工作的任何更新? – Nenotlep 2013-03-05 13:08:18

回答

11

在这里你去我的朋友

CKEDITOR.replace('editor1', 
{ 
    on : 
    { 
     instanceReady : function(ev) 
     { 
      CKEDITOR.instances.editor1.focus(); 
     } 
    } 
}); 

CKEDITOR.replace('editor1', 
{ 
    on : 
    { 
     instanceReady : function(ev) 
     { 
      this.focus(); 
     } 
    } 
}); 
+0

..它仍然是一样的。有时它正在工作,有时不是......你有什么想法吗?谢谢 – 2011-04-14 16:53:46

+0

我可以看到周围的代码吗?你有没有得到任何的错误? – mcgrailm 2011-04-14 19:58:00

17

也许试试这个,这是非常简单的:

使用startupFocus : true

因此您的代码应该lo确定这样的:

CKEDITOR.replace('editor1', 
{ 
    startupFocus : true, 
... 
+1

你也许知道,如何保留插入符号的位置(用户在div中点击[contentEditable]。你的代码有效(它提供了焦点,激发了instanceCreated事件),但插入符总是被放置在cke div的文本开头,如果你点击文本的末尾部分 – 2016-04-11 13:37:13

4
CKEDITOR.instances['instance-name'].on('instanceReady', function (event) { 
      CKEDITOR.instances['instance-name'].focus(); 
     }); 
+0

谢谢texian,这对我有用 – philippinedev 2014-08-15 10:49:01

1

肮脏的方式(请务必阅读我的回答下方留言):但

jQuery('.cke_wysiwyg_frame').contents().find('body').focus(); 
+0

通过jquery添加焦点将完全绕过cke焦点更改和事件触发完成后,必须使用cke焦点管理器。 – 2016-04-11 13:45:38

0

有点晚:

CKEDITOR.replace('YourEditor', 
{ 
on: 
    { 
    instanceReady : function(evt) 
    { 
     //Set the focus to your editor 
     CKEDITOR.instances.YourEditor.focus(); 
     } 
    } 
} 

工作正常我。 找到here

1

最好的办法我,

  1. 找到CKEditor的实例,然后
  2. 触发焦点事件

    关键的一点是在超时集中实例

    for(var instance in CKEDITOR.instances){
    $ timeout(function(){ CKEDITOR.instances [instance] .focus(); }); }

注意:我发现带for循环的实例。您可能会找到更好的方法来找到实例

0

以上答案都不适合我。以下是我为CHROME和它工作得很好:

CKEDITOR.instances['instance-name'].container.focus();