带有 display:none 表单元素的 jquery 验证器插件

Posted

技术标签:

【中文标题】带有 display:none 表单元素的 jquery 验证器插件【英文标题】:jquery validator plugin with display:none form elements 【发布时间】:2012-08-31 17:58:32 【问题描述】:

我正在使用 here 找到的验证器插件来验证表单。

我遇到的问题是,如果我将以下内容放在表单输入元素周围,验证将失败:

<div style="display:none;"><input type="text" name="test" /></div>

我需要这个,因为我正在为输入元素使用其他 UI 控件层并且不希望它们可见。

它适用于内联和块元素,但我需要隐藏它。有没有办法解决这个问题?

感谢您的反馈

更新:

我主要使用 django 验证选择选项字段(即:form.select_option_element)

如此有效:

<div style="display:none;">
    form.select_option_element
</div>

...不起作用

发布后我似乎解决了这个问题:

<div style="visibility: hidden; height: 0;">
     form.select_option_element
</div>

然后它允许我验证该字段。

【问题讨论】:

请不要将接受的答案放在您的问题中。问题和答案应该分开。 没问题,还没习惯这个地方 jQuery Validate - Enable validation for hidden fields的可能重复 【参考方案1】:

来自jQuery Validate的1.9.0变更日志:

已修复 #189 - :hidden 元素现在默认被忽略

要重新打开它,只需执行以下操作:

$(document).ready(function()    
    $.validator.setDefaults(
        ignore: []
    );
);

确保在您调用代码中的实际验证插件之前显示此内容。

我希望这会有所帮助!

【讨论】:

啊,谢谢。这很好用。我会用这个代替。 @lcplusplus 没问题;很高兴我能帮上忙。 为什么是空数组,而不是空字符串?【参考方案2】:

我喜欢@dSquared 的答案,但不幸的是,'ignore'-property 将为页面上的每个表单验证器重置。在某些情况下它不需要。

我是这样用的:

$(document).ready(function () 

    var $form = $("#some-form");

    $form.validate().settings.ignore = []; // ! Say to validator dont ignore hidden-elements on concrete form.

    $('#button-send').click(function () 
        if ($form.valid())  .. 
    );

    // !! apply plugin's initializers which will hide origin elements (it can be CLEditor or Choosen plugins)
);

【讨论】:

【参考方案3】:

您是否尝试将样式属性添加到输入元素?所以不要用 div 包装它,尝试:

<input type="text" name="test" value="" style="display: none;" />

【讨论】:

没关系,一分钟的空白。这是我解决它的方法: 我正在使用 django ModelForms,我忘了说我主要验证选择选项列表。【参考方案4】:

你可以做两件事。

1) 您可以为这个输入字段静态设置值,不会通过验证,例如

<div style="display:none;"><input type="text" name="test" value="default" /></div>

2) 如果你想在你的验证方法中否定这个值。

如果您能提供更详细的代码,我将不胜感激。

【讨论】:

我的意思是验证器甚至不识别该字段,而不是验证过程本身。 嗯,我看到了你修复它的方式。无论如何,很高兴看到你找到了解决方案。【参考方案5】:

解决此问题的另一种形式是将display: none 更改为visibility: hidden

例如:&lt;input type="text" name="test" value="" style="visibility: hidden;" /&gt;

【讨论】:

以上是关于带有 display:none 表单元素的 jquery 验证器插件的主要内容,如果未能解决你的问题,请参考以下文章

display属性

ExtJS 阻止验证表单字段的显示:无

使用 jQuery 选择样式为“visibility:visible”或“visibility:hidden”而不是“display:none”的项目

display:none vs visibility:hidden

“显示/隐藏”一个带有javascript而不是jquery的div,而不是display:none

如何获取设置display:none元素及子元素的宽高