隐藏元素的jQuery选择器除外

时间:2014-11-07 00:46:26

标签: javascript jquery jquery-validate tinymce

默认情况下,jQuery Validation ignores hidden elements

  

忽略(默认:“:隐藏”)

     

类型:选择器

     

要忽略的元素   验证,只是过滤掉它们。使用jQuery的not-method,   因此,not()接受的所有内容都可以这样传递   选项。始终忽略提交和重置类型的输入,也是如此   残疾人元素。

以下是jquery.validate.js的相关代码:

elements: function() {
    var validator = this,
        rulesCache = {};

    // select all valid inputs inside the form (no submit or reset buttons)
    return $( this.currentForm )
    .find( "input, select, textarea" )
    .not( ":submit, :reset, :image, [disabled]" )
    .not( this.settings.ignore )
    .filter( function() {
        // snip
    });
}

我遇到的问题是因为我也在使用TinyMCE。当TinyMCE应用于textarea时,它会隐藏textarea并在其位置创建一个iframe。这意味着jQuery Validation默认忽略它。

我可以强制验证通过将ignore选项的值更改为null来拾取隐藏的textareas:

$("#myform").validate({
    ignore: null
});

不幸的是,这会在我的页面上产生巨大的性能问题,其中包含数百个隐藏的输入字段。实际上它崩溃了Chrome和IE(Firefox是冠军,但仍然很慢)。

我认为我需要解决这个问题的是隐藏元素的jQuery选择器,除了具有某个类名的那些,或类似的东西:

$("#myform").validate({
    ignore: ':hidden(:not(textarea.tinymce))'
});

我意识到这是一个无效的选择器。有这样的选择器吗?如果没有,有没有更好的方法,我没有看到jQuery Validation忽略除TinyMCE隐藏的所有隐藏元素?

1 个答案:

答案 0 :(得分:3)

特殊选择器通常会追踪其他选择器(notis以及其他选择器除外:

":hidden:not(textarea.tinymce)"