jQuery验证插件+;CKEditor-键入时验证

jQuery验证插件+;CKEditor-键入时验证,jquery,forms,validation,ckeditor,Jquery,Forms,Validation,Ckeditor,我正在文本区域上使用CKEditor和jQuery验证插件() 使用jQuery插件,可以将字段标记为空或必需。 当“产品名称”等字段为空时,提交表单时,该字段将被标记为无效 但是,在键入“产品名称”时,该字段将在键入时自动标记为有效。这很好,但我希望我的支持CKEditor的textarea也一样。对于纯文本区域,一切都很好(当键入文本时,字段变为有效),但在向文本区域添加CKEditor后,这不再有效 从那时起,您必须单击submit按钮,然后才能重新验证CKEditor文本区域 有什么办法

我正在文本区域上使用CKEditor和jQuery验证插件()

使用jQuery插件,可以将字段标记为空或必需。 当“产品名称”等字段为空时,提交表单时,该字段将被标记为无效

但是,在键入“产品名称”时,该字段将在键入时自动标记为有效。这很好,但我希望我的支持CKEditor的textarea也一样。对于纯文本区域,一切都很好(当键入文本时,字段变为有效),但在向文本区域添加CKEditor后,这不再有效

从那时起,您必须单击submit按钮,然后才能重新验证CKEditor文本区域

有什么办法可以让这一切顺利进行吗

非常感谢您的帮助,stackoverflow在过去几天帮了大忙

更新:

我尝试了您提供给我的线程的解决方案,但不起作用:

我有:

CKEDITOR.instances["page_content"].document.on('keydown', function(event)
                {
                    CKEDITOR.tools.setTimeout( function()
                    { 
                        $("#page_content").val(CKEDITOR.instances.page_content.getData()); 
                    }, 0);
        });
但这一直让我感到:“CKEDITOR.instances.page_content.document未定义”

我的textare的id是“页面内容”

这在点击按钮后工作正常,但正如您所看到的,我需要以某种方式触发keydown事件

$("#btnOk").click(function(event) {
            CKEDITOR.instances.page_content.updateElement(); //works fine
});
更新2:

这段代码是正确的,它将数据从CKEDITOR获取到我的文本区域,但我的验证插件仍然没有发生任何变化,它没有在CKEDITOR中“键入时响应”,而当我键入一些文本时,它应该做出反应并说字段是正确的

CKEDITOR.instances["page_content"].on("instanceReady", function()
        {
                //set keyup event
                this.document.on("keyup", updateTextArea);
                 //and paste event
                this.document.on("paste", updateTextArea);

        });

        function updateTextArea()
        {
            CKEDITOR.tools.setTimeout( function()
                    { 
                        $("#page_content").val(CKEDITOR.instances.page_content.getData());
                    }, 0);  
        }

您必须调整CKEditor textarea,以便在HTML失去焦点时写回HTML,而不是在提交表单时(我假设这是默认情况下所做的)


几天前有人提出了一个类似的问题,似乎已经成功了。

好了,各位,多亏了你们的提示,我已经解决了这个问题:jquery验证插件对textarea或text字段中的keyup事件做出了反应,所以你们需要在更新textarea后触发该事件

看看这个:

    CKEDITOR.instances["page_content"].on("instanceReady", function()
    {
            //set keyup event
            this.document.on("keyup", updateTextArea);
             //and paste event
            this.document.on("paste", updateTextArea);

    });

    function updateTextArea()
    {
        CKEDITOR.tools.setTimeout( function()
                { 
                    $("#page_content").val(CKEDITOR.instances.page_content.getData());
                    $("#page_content").trigger('keyup');
                }, 0);  
    }

什么都不用做

第一步:重要提示:在提交前用实际内容更新CKEDITOR textarea

form.on('submit', function () {
        for (var instanceName in CKEDITOR.instances) {
            CKEDITOR.instances[instanceName].updateElement();
        }
    });
下一步:验证代码后(必须是最后一步)


我编辑了我的问题,你给我的线索是我需要的,但我无法让它工作。查看我上面编辑的问题。谢谢你的帮助!我在不同的上下文中处于完全相同的情况(访问CKEditor实例以设置其类主体),并且遇到了类似的问题。我问了一个问题,得到了一个似乎能解决问题的答案。我还没来得及看它,但也许它能帮助你:这确实是朝着正确方向迈出的一步,但我无法通过点击按键事件来正确触发。。。我得到了:CKEDITOR.document.on('click',函数(事件)但是,当单击我的普通文档正文而不是在CKEDitor内时,会触发一个事件?请查看我在评论中链接的问题的最高评分答案。使用nemisj的方法,我可以设置CKEDitor正文的类。你应该能够以这种方式将侦听器添加到其中。我越来越接近了:这获得了正确的数据,但仍然没有jQuery验证插件没有响应此代码.CKEDITOR.instances[“page_content”].on(“InstanceRady”,function(){//设置keyup事件this.document.on(“keyup”,updateTextArea);//并粘贴事件this.document.on(“粘贴”,updateTextArea);});函数updateTextArea(){CKEDITOR.tools.setTimeout(function(){$(“#page_content”).val(CKEDITOR.instances.page_content.getData());},0);}
form.validate();