我正在使用jQuery来验证表单..但是当我使用CKeditor并尝试使用jQuery验证它时,它不起作用。
以下是HTML代码的片段
<form class="form-horizontal" role="form" name="f3" id="f3" >
<div class="col-xs-8">
<textarea class="ckeditor" name="cktext" id="cktext"></textarea>
</div>
<button type="submit" class="btn btn-default btn-success">Submit</button>
</form>
这是表单验证码
<script>
$(document).ready(function(){
$("#f3").validate(
{
debug: false,
rules: {
cktext:{
required:true,
minlenght:10
}
}
});
});
</script>
仅供参考:为其他表单字段工作的jquery验证期望 ckeditor textarea 提交
任何建议..摆脱这个问题..
答案 0 :(得分:27)
最后我找到了问题的答案......
我更改了默认保存的ignore属性的值:隐藏值。因为CKEDITOR隐藏textarea jQuery验证不验证元素:
ignore: []
我刚刚更改了验证脚本..
$(document).ready(function(){
$("#f3").validate(
{
ignore: [],
debug: false,
rules: {
cktext:{
required: function()
{
CKEDITOR.instances.cktext.updateElement();
},
minlength:10
}
},
messages:
{
cktext:{
required:"Please enter Text",
minlength:"Please enter 10 characters"
}
}
});
});
HTML代码段
<form class="form-horizontal" role="form" name="f3" id="f3" >
<div class="col-xs-8">
<textarea class="ckeditor" name="cktext" id="cktext"></textarea>
</div>
<button type="submit" class="btn btn-default btn-success">Submit</button>
</form>
我在Here
中找到了这个答案感谢所有......
答案 1 :(得分:4)
我接受了上一个答案并用实际的CKEditor对其进行了充实,这样您就可以看到在提交之前将CKEditor的内容复制到textarea 中需要做些什么。
关键位是:
CKEDITOR.on('instanceReady', function () {
$.each(CKEDITOR.instances, function (instance) {
CKEDITOR.instances[instance].document.on("keyup", CK_jQ);
CKEDITOR.instances[instance].document.on("paste", CK_jQ);
CKEDITOR.instances[instance].document.on("keypress", CK_jQ);
CKEDITOR.instances[instance].document.on("blur", CK_jQ);
CKEDITOR.instances[instance].document.on("change", CK_jQ);
});
});
function CK_jQ() {
for (instance in CKEDITOR.instances) {
CKEDITOR.instances[instance].updateElement();
}
}
我从this answer得到了一个不同但相似的问题。
您遇到的另一个错误是在规则对象中拼写错误minlength
。
这就是它的工作原理:http://jsfiddle.net/ryleyb/QcJ57/
答案 2 :(得分:2)
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();
});
}
答案 3 :(得分:1)
我们可以使用以下代码验证使用jquery验证的ckeditor。
<input type="text" name="firstname" id="firstname"/>
<textarea name="editor1" id="editor1" rows="10" cols="80"></textarea>
$("#myForm").validate({
ignore: [],
rules:{
firstname:{
required:true
},
editor1: {
required: function(textarea) {
CKEDITOR.instances[textarea.id].updateElement();
var editorcontent = textarea.value.replace(/<[^>]*>/gi, '');
return editorcontent.length === 0;
}
}
},messages:{
firstname:{
required:"Enter first name"
}
}
});
有关验证的详情,请点击此处http://www.dotnetqueries.com/Article/129/validate-ckeditor-using-jquery-form-validation。
答案 4 :(得分:1)
不使用jquery验证插件验证ckeditor ...
$("form").submit( function(e) {
var messageLength = CKEDITOR.instances['editor'].getData().replace(/<[^>]*>/gi, '').length;
if( !messageLength ) {
alert( 'Please enter a message' );
e.preventDefault();
}
});
答案 5 :(得分:0)
答案 6 :(得分:0)
现有答案很好,它们仅在提交按钮上提供验证解决方案,这里有一些代码用于 ckeditor字段的反应性验证,例如默认的jquery验证。将它放在 ckeditor上/config.js:
body,
html {
width: 100%;
height: 100%;
}
#splitter {
width: calc(100% - 6px);
height: calc(100% - 6px);
padding:3px;
background: grey;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
}
#one,
#two {
width: 50%;
height: 100%;
max-width: 90%;
min-width: 10%;
background: orange;
}
#two {
background: green;
}
#nested {
width: auto;
height: calc(100% - 6px);
margin:3px;
background: black;
}
奖励:如果您使用表单的自定义提交按钮和处理程序,现在在发送之前不需要明确调用 CKEDITOR.on('instanceReady', function (e) {
var instance = e.editor;
instance.on("change", function (evt) {
onCKEditorChange(evt.editor);
});
//key event handler is a hack, cause change event doesn't handle interaction with these keys
instance.on('key', function (evt) {
var backSpaceKeyCode = 8;
var deleteKeyCode = 46;
if (evt.data.keyCode == backSpaceKeyCode || evt.data.keyCode == deleteKeyCode) {
//timeout needed cause editor data will update after this event was fired
setTimeout(function() {
onCKEditorChange(evt.editor);
}, 100);
}
});
instance.on('mode', function () {
if (this.mode == 'source') {
var editable = instance.editable();
editable.attachListener(editable, 'input', function (evt) {
onCKEditorChange(instance);
});
}
});
});
function onCKEditorChange(intance) {
intance.updateElement();
triggerElementChangeAndJqueryValidation($(intance.element.$));
}
function triggerElementChangeAndJqueryValidation(element) {
element.trigger('keyup');
}
通过ajax将表单发送到您的服务器。
也别忘了打电话:
CKEDITOR.instances["yourtextarea"].updateElement();
我的CKeditor:版本:&#34; 4.5.4&#34;,修订版:&#34; d4677a3&#34; ckeditor事件的文档:http://docs.ckeditor.com/#!/api/CKEDITOR.editor。在这个网站上很难找到合适的文档。
答案 7 :(得分:0)
简单的代码段为我工作。
CKEDITOR.replace( 'textarea_input_name');
$( "#form_id" ).submit( function( e ) {
//in case, if didn't worked, remove below comment. This will get the textarea with current status
//CKEDITOR.instances.textarea_input_name.updateElement( );
var messageLength = CKEDITOR.instances['textarea_input_name'].getData( ).replace( /<[^>]*>/gi, '' ).length;
if( !messageLength )
{
alert( 'Please fill required field `Text`' );
//stop form to get submit
e.preventDefault( );
return false;
}
else
{
//editor is not empty, proceed to submit the form
return true;
}
} );
希望这有帮助!!!
答案 8 :(得分:0)
Bydefault Ckeditor字段未使用所需规则进行验证。我们必须为此创建自定义验证器方法 -
jQuery.validator.addMethod('ckrequired', function (value, element, params) {
var idname = jQuery(element).attr('id');
var messageLength = jQuery.trim ( CKEDITOR.instances[idname].getData() );
return !params || messageLength.length !== 0;
}, "Image field is required");
最重要的是将忽略数组空白 -
<script>
$(document).ready(function(){
$("#f3").validate({
ignore : [],
rules: {
cktext:{
ckrequired:true
}
}
});
});
</script>
现在你已经准备好了。
答案 9 :(得分:0)
在初始化ckeditor时:
CKEDITOR.on('instanceReady', function () {
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].on('change', function () {
this.updateElement();
});
}
});
也不要忘记在验证插件初始化时调用它们:
ignore: []
但是最重要的一点似乎是无关紧要的是,required class
应该放在文本区域输入中
答案 10 :(得分:0)
在 ckeditor5 中,您不能只是自动获取数据。您必须使用他们的函数来获取数据,以下是用于使用 jquery 验证 ckeditor5 的源代码。
/// 仅当页面中没有 ckeditor5 文本框并且想要将 textbx 初始化为特定 id 时才需要以下代码,例如 id="#content"
var editorTextarea;
ClassicEditor
.create (document.querySelector ('#content'))
.then (editor => {
editorTextarea = editor;
})
.catch (error => {
console.error (error);
});
/ ** This way I invoke validations, where "content" is the name of my textarea:
<div class="form-group">
<textarea name="content" id="content"><?= $data["page"]->content;?></textarea>
</div>
** /
// if have already intialized the ckeditor5 textbox than you just have to replace **editorTextarea** to with your editor name
$ .validator.addMethod ("ck_editor", function () {
var content_length = editorTextarea.getData (). trim (). length;
return content_length> 0;
}, "Please insert content for the page.");
$ ("# form_page_edit"). validate ({
ignore it:[],
rules: {
title: {
required: true,
minlength: 6,
maxlength: 255
},
url: {
required: true,
minlength: 6,
maxlength: 255
},
content: {
ck_editor: true
}
}
});
这可以帮助您使用 jquery 验证来验证 ckedior5
答案 11 :(得分:0)
像下面这样对我有用。我添加了“return
”。
rules : {
subject: {
required: true
},
description: {
required: function()
{
return CKEDITOR.instances.description.updateElement();
},
}
}