Javascript [contenteditable]元素和jQuery验证插件存在问题

Javascript [contenteditable]元素和jQuery验证插件存在问题,javascript,jquery,forms,jquery-validate,contenteditable,Javascript,Jquery,Forms,Jquery Validate,Contenteditable,我准备了一个,它演示了[contenteditable]元素没有HTML表单。对我来说,这是个问题,因为jQuery验证插件需要表单。查看从383行开始的源代码片段: function delegate( event ) { var validator = $.data( this.form, "validator" ), eventType = "on" + event.type.replace( /^validate/, "" ), settings

我准备了一个,它演示了
[contenteditable]
元素没有HTML表单。对我来说,这是个问题,因为jQuery验证插件需要表单。查看从383行开始的源代码片段:

function delegate( event ) {
    var validator = $.data( this.form, "validator" ),
        eventType = "on" + event.type.replace( /^validate/, "" ),
        settings = validator.settings;
    if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {
        settings[ eventType ].call( validator, this, event );
    }
}

$( this.currentForm )
    .on( "focusin.validate focusout.validate keyup.validate",
        ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " +
        "[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " +
        "[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " +
        "[type='radio'], [type='checkbox'], [contenteditable]", delegate )

    // Support: Chrome, oldIE
    // "select" is provided as event.target when clicking a option
    .on( "click.validate", "select, option, [type='radio'], [type='checkbox']", delegate );
这里我们可以看到,元素,其中一个是
[contenteditable]
侦听事件,然后调用
委托
事件处理程序

[contenteditable]
触发此列表中的某个事件时,
委托
方法尝试从元素
var validator=$.data(this.form,“validator”)
获取验证器,但正如我前面所说的
[contenteditable]
没有表单(请参见


有没有办法解决这个问题?是否可以向所有
[contenteditable]
元素添加表单?

探索validate的ignore选项是否可以解决您的问题

ignore: ":hidden:not('#summernote')"

更新的fiddle-

这是jquery验证程序插件中的一个已知错误。然而,这一点现在已经在本中得到了修复,应该很快就会发布

修正1: 如果您不能等待发布,修复方法是将此代码放在
delegate()
方法的开头。解决方案由
@svrx
制定

// Set form expando on contenteditable
if ( !this.form && this.hasAttribute( "contenteditable" ) ) {
    this.form = $( this ).closest( "form" )[ 0 ];
}
正如您所看到的,修复方法只是将表单设置为父元素

修正2:
正如
@chrisAtomix
在他的文章中所说,不要使用最新的
jquery验证程序插件
。如果未添加
contenteditable
功能,请改用较低版本。他正在使用
v1.14.0

谢谢。现在我使用
v1.14.0
并等待发布