如何在CKEditor textareas上触发模糊事件?

时间:2015-09-28 20:57:08

标签: javascript jquery ckeditor

我们有一些代码用于验证在模糊运行的CKEditor textarea上的输入。我们在所有使用CKEditor的textareas中添加了一个ckeditor_textarea类,并运行此代码将必要的函数附加到blur事件:

$("textarea.ckeditor_textarea").each(function(){
    var textarea_id = $(this).attr("id");
    CKEDITOR.instances[textarea_id].on('blur',function(){
        // Validation functions here
    });
});

这可以在模糊事件发生时触发验证功能。但是,我们还需要在提交按钮时手动触发模糊事件,以便在提交之前在这些CKEditor textareas上运行验证功能。

如何在CKEditor textarea上触发模糊事件?使用jQuery语法(当然这不起作用因为CKEditor实例不是jQuery对象),我基本上都在寻找这样的东西:

$("textarea.ckeditor_textarea").each(function(){
    var textarea_id = $(this).attr("id");
    CKEDITOR.instances[textarea_id].trigger('blur');
});

4 个答案:

答案 0 :(得分:2)

  1. 您不应混合使用jQuery事件和CKEDITOR事件。如果您想为CKEDITOR实例设置模糊,请注册:

    ckeInst.on('模糊',功能(e){

    });

  2. 然后,如果你真的想要触发模糊事件,你可以这样做:

    ckeInst.focusManager.blur( true ); 
    

    编辑器将从事件(如果您拥有)或通过CKEDITOR.instances [' yourCkeName'];

    中重新启动

答案 1 :(得分:1)

对于提交验证,我建议您在提交处理程序中使用updateElement()方法,然后运行验证代码:

以下将使用页面上的编辑器更新任何和所有元素:

$('form').on('submit', function(e){
     for (instance in CKEDITOR.instances) {
         CKEDITOR.instances[instance].updateElement();
      }
      // run validation code

});

这也确保表单数据与编辑器本身保持同步

答案 2 :(得分:0)

根据@ charlietfl的回答,我能够为我的情况找到解决方案。

首先,我创建了一个调用函数来运行验证代码:

function ckeditor_blur_event(textarea_id){
    // validation code  
}

然后,我更改了我的问题中的第一个代码块以使用新函数:

$("textarea.ckeditor_textarea").each(function(){
    var textarea_id = $(this).attr("id");
    ckeditor_blur_event(textarea_id)
});

最后,我在提交表单时触发相同的验证码:

$("textarea.ckeditor_textarea").each(function(){
    var textarea_id = $(this).attr("id");
    CKEDITOR.instances[textarea_id].updateElement();
    ckeditor_blur_event(textarea_id)
});

答案 3 :(得分:0)

对我来说可靠而正确地工作的唯一方法是:

editor.window.$.frameElement.blur();