与ckeditor集成的textarea的jquery验证

时间:2011-02-26 11:17:33

标签: jquery jquery-plugins jquery-validate ckeditor

我有text-area

<td><textarea id="event-body" name="body">
<p class="error"></p>

与CKEDITOR集成

CKEDITOR.replace("event-body")

jquery验证plugin。代码就像这样

$('#event').validate({
    rules:{
        name:{
            required: true
        },  
    },
    messages:{
        body:{
            required: "event body is required"
        }
    },
    errorPlacement: function(error, element){
        $(element).each(function (){
            $(this).parent('td').find('p.error').html(error);
        })
    });

代码工作正常但是当我输入textarea元素时,我仍然会收到错误消息,直到我单击它两次。即我必须提交我的页面两次,以便即使textarea不为空,我也不会收到错误消息。

没有办法顺利验证它(无需点击两次)。

9 个答案:

答案 0 :(得分:13)

看看here

基本上你需要打电话

CKEDITOR.instances.editor1.updateElement();

在运行验证之前。

只需将editor1替换为textarea的名称。

然后致电

$(myformelement).validate();

修改

$("#my-form-submit-button").click(function(e){
     e.preventDefault();
     CKEDITOR.instances.event-body.updateElement();
     $('#event').validate({
          ...options as above..
     });o
})

答案 1 :(得分:4)

将其放入提交按钮mousedown()事件:

$("#submit").mousedown(function(){
  for (var i in CKEDITOR.instances){
    CKEDITOR.instances[i].updateElement();
  }
});

答案 2 :(得分:4)

jQuery验证器仅验证可见的输入字段,但CKEDITOR使textarea隐藏,防止其被验证。

答案 3 :(得分:2)

我已经将你的消化结合在一起并做出一点没有问题的小作弊。

我的代码:

<form id="create-message-form-3" class="form-horizontal" role="form" accept-charset="utf-8">
                <div class="title"><h1>Add Content:</h1></div>
                <div class="col col-12">
                  <textarea class="form-control ckeditor" name="templateeditor" id="templateeditor" rows="6"></textarea>
                  <p class="error"></p>
                </div>



                <div class="text-center">
                    <a class="btn btn-success pull-left" href="create-message-2.php">Back</a>
                    <input class="btn btn-default" type="button" value="Save">
                    <input id="submit-templateeditor" class="btn btn-success pull-right" type="submit" value="Next Step">
                </div>
             </form>

在我的.css文件中,我强迫我这样:

textarea.ckeditor {
visibility: visible !important;
display: block !important;
height: 0px !important;
border: none !important;
resize:none;
overflow: hidden; }

我的.js验证是正常格式:

    $("#submit-templateeditor").click(function(){
     CKEDITOR.instances.templateeditor.updateElement();
     $("#create-message-form-3").validate({
        rules: {
            templateeditor: "required"
        },
        messages: {
            templateeditor: "Please add some code before continue"
        },
        errorPlacement: function(error, element){
            $(element).each(function (){
                $(this).parent('div').find('p.error').html(error);
            });
        }
    });
});

答案 4 :(得分:1)

在您验证表单的javascript中使用此功能。它将更新您的ckeditor并将ckeditor的值分配给您集成它的textarea。

它应该在提交表单之前运行:

CKEDITOR.instances.editor1.updateElement();

答案 5 :(得分:1)

如果你像

那样附上它
$("#Detail").ckeditor(config);

比你需要使用这样的东西

var editor = $('#Detail').ckeditorGet();
editor.updateElement();

我使用这个示例函数在这种情况下提交我的表单

function SubmitEvent(){
    var editor = $('#Detail').ckeditorGet();
    editor.updateElement();
    if($("#EventForm").valid()) {
        $('#EventForm').submit();
    }
}

答案 6 :(得分:1)

我更愿意更新blur事件的每个实例,因此您无需更改提交函数的任何内容! :)

$('#myInstance').ckeditor({toolbar:'MyToolbar'});
CKEDITOR.instances.myInstance.on('blur', function( e ){
    CKEDITOR.instances.myInstance.updateElement();
});

答案 7 :(得分:1)

jQuery .validate()函数提供“onsubmit”选项,以在验证之前执行自定义操作。     默认情况下,它设置为true。         我在我的项目中使用它并且效果很好。

        $(".selector").validate({
          onsubmit: function(){
                    CKEditorUpdate();
                    return true;
                },
                rules:{
                    title:{required:true},
                    content:{required:true}
                },
                messages:{
                    title:{required:"Please enter a title"},
                    content:{required:"Please enter some content"}
                },
                submitHandler : function(form){
        });

    function CKEditorUpdate() {
        for (instance in CKEDITOR.instances)
            CKEDITOR.instances[instance].updateElement();
    }

这是一种更清洁,更容易理解的方法。 请参阅http://jqueryvalidation.org/validate#onsubmit

答案 8 :(得分:0)

如果您使用SPRY,这对我有用....

<script>
$(document).ready(function () {

    CKEDITOR.instances["editor1"].on("instanceReady", function () {

        //set keyup event
        this.document.on("keyup", function () { CKEDITOR.instances["editor1"].updateElement(); });
        //and paste event
        this.document.on("paste", function () { CKEDITOR.instances["editor1"].updateElement(); });
        //and cut event
        this.document.on("cut", function () { CKEDITOR.instances["editor1"].updateElement(); });

    });

    CKEDITOR.instances["editor2"].on("instanceReady", function () {

        //set keyup event
        this.document.on("keyup", function () { CKEDITOR.instances["editor2"].updateElement(); });
        //and paste event
        this.document.on("paste", function () { CKEDITOR.instances["editor2"].updateElement(); });
        //and cut event
        this.document.on("cut", function () { CKEDITOR.instances["editor2"].updateElement(); });

    });

    CKEDITOR.instances["editor3"].on("instanceReady", function () {

        //set keyup event
        this.document.on("keyup", function () { CKEDITOR.instances["editor3"].updateElement(); });
        //and paste event
        this.document.on("paste", function () { CKEDITOR.instances["editor3"].updateElement(); });
        //and cut event
        this.document.on("cut", function () { CKEDITOR.instances["editor3"].updateElement(); });

    });

});
</script>