我的HTML中有两个CKEditor(我的意思是说多个ckeditors)。
此外,我使用Validate插件检查CKEditor是否为空,如果为空显示错误。
验证工作完美,但它第二次验证,而它应该第一次验证。
我已在这里查看了所有问题和答案,但没有人帮忙。
我创建了一个JS Fiddle。
验证代码:
HTML
<form action="" method="post" id="frmEditor">
<p>
<label for="editor1">
Editor 1:
</label>
<textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"></textarea>
</p>
<p>
</p>
<p>
<label for="editor1">
Editor 2:
</label>
<textarea class="ckeditor" cols="80" id="editor2" name="editor2" rows="10"></textarea>
</p>
<p>
<input type="submit" value="Submit">
</p>
</form>
脚本
$(document).ready(function(){
// validate signup form on keyup and submit
$("#frmEditor").validate({
ignore: [],
debug: false,
rules: {
editor1:{
required: true
},
editor2:{
required: true
}
},
messages: {
editor1: {
required: "Please enter"
},
editor2: {
required: "Please enter"
}
},
submitHandler: function(form) {
form.submit();
}
});
});
答案 0 :(得分:2)
您需要在验证执行前更新实例。首先在按钮上添加 id 属性或类
<input type="submit" value="Submit" id="submitFormBtn">
现在在你的js代码中写下函数
$('#submitFormBtn').click(function () {
CKEDITOR.instances.editor1.updateElement();
CKEDITOR.instances.editor2.updateElement();
});
希望这会奏效。
答案 1 :(得分:1)
jQuery.validator.setDefaults({
ignore: [],
// with this no hidden fields will be ignored E.g. ckEditor text-area
});
我观察到验证正在进行第二次提交。原因是,ckEditor
隐藏了实际的文本区域,并将iframe作为编辑器实例,并在提交时将内容推送到文本区域。这意味着,TextArea
上的验证会被陈旧数据触发。要解决此问题,我正在更新编辑器实例的文本更改TextArea
。
for (instance in CKEDITOR.instances) {
CKEDITOR.instances[instance].on('change', function ()
{
var editorName = $(this)[0].name;
CKEDITOR.instances[editorName].updateElement();
});
}
答案 2 :(得分:0)
我尝试了以下解决方案并且有效。
<textarea name="txtDesc<?php echo $i;?>" id="txtDesc<?php echo $i;?>" class="ckeditor" rows="5" cols="17" ><?php echo $txtDesc?></textarea>
<script>
CKEDITOR.replace("txtDesc<?php echo $i;?>");
CKEDITOR.add
//CKEDITOR.replace('txtDesc0');
</script>
如果只有1个ckEditor
for (instance in CKEDITOR.instances) {
CKEDITOR.instances[instance].on("instanceReady", function () {
//set keyup event
this.document.on("keyup", function () { CKEDITOR.instances[instance].updateElement(); });
//and paste event
this.document.on("paste", function () { CKEDITOR.instances[instance].updateElement(); });
});
}
如果有超过1个ckEditor(在我的情况下为2)
CKEDITOR.instances["txtDesc0"].on("instanceReady", function () {
this.document.on("keyup", function () { CKEDITOR.instances["txtDesc0"].updateElement(); });
this.document.on("paste", function () { CKEDITOR.instances["txtDesc0"].updateElement(); });
this.document.on("cut", function () { CKEDITOR.instances["txtDesc0"].updateElement(); });
});
CKEDITOR.instances["txtDesc1"].on("instanceReady", function () {
this.document.on("keyup", function () { CKEDITOR.instances["txtDesc1"].updateElement(); });
this.document.on("paste", function () { CKEDITOR.instances["txtDesc1"].updateElement(); });
this.document.on("cut", function () { CKEDITOR.instances["txtDesc1"].updateElement(); });
});