2016-09-22 27 views
0

我正在做一个笔记应用程序,它使用CKEditor's inline mode来公开动态创建的可编辑div。 (我用的CKEditor版本4.5.8。)CKEditor:逃避编辑器焦点从内联编辑器通过JS(不需要鼠标点击)?

当使用在线编辑器,你可以点击你的鼠标从DIV远离开编辑模式,这将导致以下行为的变化:

  • div周围的蓝色高光消失
  • 闪烁的光标消失
  • 按键不再“键入”div(即编辑器现在不活动)。

但我不能想出逃生编辑如何集中(即重现上述变化),而无需用户实际点击鼠标。以下是我试过到目前为止:

  • 直列编辑元素名为jQuery的.blur():这在视觉上删除焦点和CKEDITOR.currentInstance成为null;但按键仍然会将字符添加到div,从而重新激活焦点。
  • 在内联可编辑元素上调用Jquery .removeClass('cke_focus') - 无法看到效果。
  • 在页面上的其他元素上调用Jquery .click().focus() - 没有可见的效果。
  • 调用CKEDITOR.currentInstance.focusManager.blur() - 无可见效果。
  • 被称为CKEDITOR.currentInstance.container.fire('blur') - 没有明显的影响。
  • CKEDITOR.currentInstance.element.fire('blur') - 没有明显的效果。
  • 调用CKEDITOR.currentInstance.destroy() - 由于contenteditable="true"属性或类似情况,编辑器自动重新初始化后会自动重新初始化。无论如何,div仍然关注焦点并继续陷入压力。

我要的是重新当你从行内编辑DIV点击即可发生了什么:重点指标消失,按键不再添加文本到div。任何想法我可以做到这一点?提前致谢!

+0

你检查的答案吗? – Dekel

+0

谢谢@Dekel,不,我没有检查你的答案,因为你在我的时间夜间发布。但是如果他们为我工作,我会投票并接受答案,所以不必担心我忘记了您的意见。 –

+0

肯定:)没问题,只是想确保你有关于它的通知。谢谢! – Dekel

回答

0

诀窍是在blur与删除所有选择合并范围,你目前有:

CKEDITOR.instances.editor1.on('contentDom', function() { 
    CKEDITOR.instances.editor1.document.on('keydown', function(event) { 
     if (event.data.getKey() == 27) { 
      $(CKEDITOR.currentInstance.element.$).blur(); 
      window.getSelection().removeAllRanges(); 
     } 
    }); 
}); 

和工作例如:
https://jsfiddle.net/bwuhp14s/