使用tinyMCE和漂亮的工具提示/焦点/错误指示进行jQuery表单验证

使用tinyMCE和漂亮的工具提示/焦点/错误指示进行jQuery表单验证,jquery,validation,tinymce,tooltip,Jquery,Validation,Tinymce,Tooltip,我试着和你一起使用。我想做的是: 提交时,应验证表格。无效控件应突出显示(带有.error CSS类),并应显示工具提示以告知错误 每当用户修复错误时(例如,通过键入正确的值),工具提示和.error突出显示将消失 每当发生错误时,应聚焦表格中的第一个元素 这本书已经帮了我很多忙了!但是在更新错误状态时仍然存在一个问题——特别是对于tinyMCE表单 我已经准备好跑步。 更新 经过进一步调查,我发现在“success”方法中,返回控件的“label”(例如textarea),而不是控件本身。

我试着和你一起使用。我想做的是:

  • 提交时,应验证表格。无效控件应突出显示(带有.error CSS类),并应显示工具提示以告知错误
  • 每当用户修复错误时(例如,通过键入正确的值),工具提示和.error突出显示将消失
  • 每当发生错误时,应聚焦表格中的第一个元素
这本书已经帮了我很多忙了!但是在更新错误状态时仍然存在一个问题——特别是对于tinyMCE表单

我已经准备好跑步。

更新 经过进一步调查,我发现在“success”方法中,返回控件的“label”(例如textarea),而不是控件本身。请参阅控制台输出。但我需要控制——有什么办法吗?我这样做正确吗

这里是(仅)javascript(整个示例不在这里运行)

///jQuery验证程序默认值
$.validator.setDefaults({
errorPlacement:功能(错误,obj){
log(“无效:id-”+obj.attr('id'));
log(“无效:类型-”+obj.prop('nodeName'));
var myobj=obj;
如果(对象为(“文本区域”)){
myobj=obj.prev().contents().find('iframe');
obj.prev().addClass('error');
}
myobj.attr('title',error.text());
var errorLocation=$(“.error”);
errorLocation.tooltip({
职位:{
我的:“中底”,
位于:“中心顶部+8”
}
});
},
成功:功能(obj){
log(“有效:id-”+obj.attr('id'));
log(“valid:type-”+obj.prop('nodeName'));
var myobj=obj;
如果(对象为(“文本区域”)){
myobj=obj.prev().contents().find('iframe');
obj.prev().removeClass('error');
}
myobj.removeClass(“error”).attr(“title”,”);
},
焦点有效:功能(obj){
//将重点放在tinymce上提交验证
if(对象设置焦点有效){
试一试{
var toFocus=$(obj.findlastative()| | | obj.errorList.length&&obj.errorList[0]。元素| |[]);
if(toFocus.is(“textarea”)){
tinyMCE.get(toFocus.attr(“id”)).focus();
}否则{
toFocus.filter(“:可见”).focus();
}
}捕获(e){
//聚焦隐藏元素时忽略IE抛出错误
}
}
}
});
函数initMCE(){
$(“textarea.tinymce”).tinymce({
主题:“现代”,
工具栏项目大小:“小”,
工具栏:“粗体斜体下划线删除线|左对齐居中对齐右对齐对齐对齐对齐表格|复制粘贴|布利斯特数字列表|撤消重做|链接全屏本地自动保存”,
设置:函数(编辑器){
编辑:关于(“变更”,职能(e){
//console.log(“变更事件”,e);
tinyMCE.triggerSave();
$(“#”+editor.id).valid();
});
}
});
}
$(函数(){
initMCE();
var验证程序=$(“#myform”).submit(函数(){
//在提交验证之前更新基础textarea
tinyMCE.triggerSave();
}).验证({
忽略:“,
规则:{
标题:“必选”,
一些选项:“必需”,
内容:“必需”
},
信息:{
标题:“请输入标题”,
someoptions:“请选择选项”,
内容:“请输入一些文本”
}
});

});好的,经过一些进一步的尝试和错误,我做到了:)

这是最新版本。

如您所见,我现在使用验证插件的highlight和unhighlight方法:

///jQuery验证程序默认值
$.validator.setDefaults({
errorPlacement:函数(错误,元素){
var myelement=元素;
if(element.is(“textarea”)){
myelement=element.prev().contents().find('iframe');
}
myelement.attr('title',error.text());
var errorLocation=$(“.error”);
errorLocation.tooltip({
职位:{
我的:“中底”,
位于:“中心顶部+8”
}
});
},
突出显示:函数(元素、errorClass、validClass){
$(元素).addClass(错误类).removeClass(有效类);
if($(元素).is(“textarea”)){
$(element.prev().addClass('error');
}
},
取消高亮显示:函数(元素、errorClass、validClass){
$(元素).removeClass(错误类).addClass(有效类);
if($(元素).is(“textarea”)){
$(element.prev().removeClass('error');
}
},
成功:功能(元素){
var myelement=元素;
if(element.is(“textarea”)){
myelement=element.prev().contents().find('iframe');
//obj.prev().removeClass('error');
}
myelement.attr(“title”,”);
}
});
函数initMCE(){
$(“textarea.tinymce”).tinymce({
主题:“现代”,
工具栏项目大小:“小”,
工具栏:“粗体斜体下划线删除线|左对齐居中对齐右对齐对齐对齐对齐表格|复制粘贴|布利斯特数字列表|撤消重做|链接全屏本地自动保存”,
设置:函数(编辑器){
编辑:关于(“变更”,职能(e){
//console.log(“变更事件”,e);
tinyMCE.triggerSave();
$(“#”+editor.id).valid();
});
}
});
}
$(函数(){
initMCE();
var验证程序=$(“#myform”).submit(函数(){
//在提交验证之前更新基础textarea
tinyMCE.triggerSave();
}).验证({
是的,
忽略:“,
规则:{
标题:“必选”,
一些选项:“必需”,
内容:“必需”
},
信息:{
标题:“请输入标题”,
someoptions:“请选择选项”,
内容:“请输入一些文本”
}
});
validator.focusInvalid=函数(){
//将重点放在tinymce上提交验证
if(this.settings.focusInvalid){
试一试{
var toFocus=$(this.findlastative()| | this.errorList.length&&this.errorList[0]。元素| |[]);
if(toFocus.is(“textarea”))