4

我在 textarea 和 jQuery 验证插件(http://bassistance.de/jquery-plugins/jquery-plugin-validation/)上使用 CKEditor

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

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

从那时起,您必须在重新验证 CKEditor textarea 之前单击提交按钮。

关于如何完成这项工作的任何想法?

更新:

我尝试了您给我的线程中的解决方案,但它不起作用: Using jQuery to grab the content from CKEditor's iframe

我有:

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 是“page_content”

单击按钮后效果很好,但是如您所见,我需要以某种方式触发 keydown 事件

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

更新 2:

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

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);  
        }
4

3 回答 3

5

jquery 验证插件对 textarea 或文本字段中的 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);  
    }
于 2009-12-15T21:38:11.483 回答
2

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

前几天有人提过类似的问题,好像成功了,看看

于 2009-12-15T16:25:03.190 回答
1

无需做任何事情。

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

form.on('submit', function () {
        for (var instanceName in CKEDITOR.instances) {
            CKEDITOR.instances[instanceName].updateElement();
        }
    });

下一步:然后在验证您的代码后(必须是最后一步)

form.validate();
于 2017-02-23T12:08:15.110 回答