如果CKEditor中的内容已更改

时间:2012-03-12 13:41:24

标签: jquery ckeditor

我正在尝试使用jquery检测CKEditor中是否有某些内容发生了变化,但无法使其正常工作。

 var isModified = false;

 $('textarea,input').change(function(){
      if(!isModified){
          isModified = true;
        }
 });

$(".ckeditor").document.on('keydown', function() {  isModified = true; });

window.onbeforeunload = function(){
        $(".ckeditor").ckeditorGet().updateElement();

        if(isModified){
              return "Are you sure you want to leave page?";
           }
     }; 

有谁知道为了使它适用于CKEditor 3.6.2需要什么?它适用于所有其他表单元素。

4 个答案:

答案 0 :(得分:29)

这有a function called checkDirty() in the CKE api。这样你就不需要自己动手了。还附带其他有用的功能,如resetDirty()。试试这个作为测试:

if ( CKEDITOR.instances.editor1.checkDirty() ) alert("Content changed");

更新5.7.2013

请参阅http://dev.ckeditor.com/ticket/9794 - 更改事件已确认为新功能!它也被标记为Milestone 4.2,并通过CKSource的推文确认!只是不相信里程碑的截止日期,它们往往会改变。

更新1.8.2013

CKEditor 4.2已经出局,它将onChange事件作为一项功能引入。显然,根据文档,每次可能的变化都不是100%可靠 - 希望它足够好用!在http://ckeditor.com/release/CKEditor-4.2

发布信息

答案 1 :(得分:3)

您可以通过绑定编辑器的键事件来跟踪编辑器中的更改。

使用jQuery适配器:

$('.ckeditor').ckeditorGet().on('key', function(e) {
    var keyCode = e.data.keyCode; // if you need to track the key
    isModified = true;
});

key活动

上的文档

答案 2 :(得分:1)

您可以使用此CKEditor plugin在内容发生变化时触发事件。

答案 3 :(得分:0)

使用我的本地Drupal安装进行检查,CKEditor不是常规HTML表单元素(它不是textarea)。相反,它是一个模仿表单元素的IFrame。我想你可能需要创建一个小的CKEditor插件,并使用它来与你的本地脚本进行通信,参见:add code for event listener for keypress in ckeditor