jQuery验证插件+;CKEditor-键入时验证
我正在文本区域上使用CKEditor和jQuery验证插件() 使用jQuery插件,可以将字段标记为空或必需。 当“产品名称”等字段为空时,提交表单时,该字段将被标记为无效 但是,在键入“产品名称”时,该字段将在键入时自动标记为有效。这很好,但我希望我的支持CKEditor的textarea也一样。对于纯文本区域,一切都很好(当键入文本时,字段变为有效),但在向文本区域添加CKEditor后,这不再有效 从那时起,您必须单击submit按钮,然后才能重新验证CKEditor文本区域 有什么办法可以让这一切顺利进行吗 非常感谢您的帮助,stackoverflow在过去几天帮了大忙 更新: 我尝试了您提供给我的线程的解决方案,但不起作用: 我有:jQuery验证插件+;CKEditor-键入时验证,jquery,forms,validation,ckeditor,Jquery,Forms,Validation,Ckeditor,我正在文本区域上使用CKEditor和jQuery验证插件() 使用jQuery插件,可以将字段标记为空或必需。 当“产品名称”等字段为空时,提交表单时,该字段将被标记为无效 但是,在键入“产品名称”时,该字段将在键入时自动标记为有效。这很好,但我希望我的支持CKEditor的textarea也一样。对于纯文本区域,一切都很好(当键入文本时,字段变为有效),但在向文本区域添加CKEditor后,这不再有效 从那时起,您必须单击submit按钮,然后才能重新验证CKEditor文本区域 有什么办法
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();