【问题标题】:Prevent hidden/disabled fields to be Validated with jQuery.validate() [closed]防止使用 jQuery.validate() 验证隐藏/禁用的字段 [关闭]
【发布时间】:2013-12-05 19:37:57
【问题描述】:

我的 MVC4 应用程序中有 3 个字段(fieldA、fieldB、fieldC),我根据 fieldA 的值显示/隐藏 fieldB 和 fieldC。尽管显示/隐藏这些字段没有问题,但我无法阻止 fieldB 和 fieldC 在隐藏或禁用时被验证。我尝试了 3-4 种不同的方法,即在 showHideFields() 方法中使用禁用的隐藏属性,在 jQuery("#...").validate 方法中使用“ignore”属性。但是它们都没有正常工作。您能否提供这样一种解决方案来做到这一点?

剃须刀:

function showHideFields() {
    var $index = $('#fieldA').val();
    if ($index == '1') {           
        $('#fieldB').show(); 
        $('#fieldC').show(); 
    }
    else {
        $('#fieldB').hide(); 
        $('#fieldC').hide(); 
    }
}


jQuery(function () {

    jQuery("#fieldA").validate({
        expression: "if (VAL) {return true;} else {return false;}", 
        message: "Please fill in this field"
    });

    jQuery("#fieldB").validate({
        expression: "if (VAL) {return true;} else {return false;}",
        message: "Please fill in this field"
    });

    jQuery("#fieldC").validate({
        expression: "if (VAL) {return true;} else {return false;}",
        message: "Please fill in this field"
    });
    ...
}

【问题讨论】:

标签: javascript jquery asp.net-mvc validation


【解决方案1】:

您的代码有问题:

jQuery("#fieldC").validate({
    expression: "if (VAL) {return true;} else {return false;}",
    message: "Please fill in this field"
});

1) .validate() 方法(来自 jQuery Validate 插件)不能附加到字段 id。它只能附加到整个表单。

2) expression: 应该是什么? There is no such option for this pluginVAL 未在您显示的任何地方定义。


就您的问题而言,从 1.9 版开始,hidden fields are ignored by default using this plugin。没有特殊的设置或选项;隐藏字段被忽略。

请注意,在此演示中,field2 包含 style="display:none",尽管声明了 required 规则,但它并未经过验证...

演示:http://jsfiddle.net/eWe9a/


编辑:

正如下面 OP 的 cmets 最终揭示的那样:

“我遵循了该页面上的示例 geektantra.com/2009/09/jquery-live-form-validation,根据该页面,我遵循的所有内容都是正确的。”

当您用 标记问​​题并说您正在使用jQuery.validate() 时,您使用the jQuery Validation plugin

解决方案是包含您所询问的正确插件,我的示例将非常适合您。

【讨论】:

  • 亲爱的 Sparky,我遵循了该页面上的示例 geektantra.com/2009/09/jquery-live-form-validation 并且根据该页面,我遵循的所有内容都是正确的。有什么错误吗?另一方面,我查看了您的演示,但在从输入移动并提交表单后,我需要进行验证,如示例 geektantra.com/2009/09/jquery-live-form-validation 所示。你能举一个像那个页面上包含隐藏字段的例子吗?提前致谢。
  • @H.Johnson,那是因为您在this page 上遵循的示例不是,即使使用jQuery Validation plugin!您必须更加小心地正确标记问题并包含有关您正在使用的插件的所有正确信息。当有人提到jQuery.validate() 并用jquery-validate 标记问​​题时,他们应该在谈论这个:jqueryvalidation.org
  • 感谢您的帮助。抱歉,但我之前从未使用过这种验证插件,并且由于我使用了“jquery.validate.js”,所以我认为我使用了“jQuery 验证插件”。无论如何,我需要一个执行以下要求的示例: 1) 当然我想使用 jQuery Validation 插件。我希望在切换到另一个控件(实时验证)后验证字段。 2) 除此之外,如果用户直接按下提交按钮,则应验证所有必要的字段,如第一步所述。在此先感谢...
  • @H.Johnson,请不要在 cmets 中提出全新的问题。我已经回答了您发布的原始问题。只需发布一个新问题。
  • 好的,我在那个页面上创建了:stackoverflow.com/questions/20482448/…你能帮我吗?
【解决方案2】:

看起来很奇怪,因为jQuery Validation 默认忽略隐藏字段。检查live demo

【讨论】:

  • 是的,就像我已经说过的那样。
  • @Sparky,我知道,只是想展示一个接近情况的现场样本。不过你的答案是正确的,+1。
  • @Zabavsky:我遵循了该页面上的示例geektantra.com/2009/09/jquery-live-form-validation,根据该页面,我遵循的所有内容都是正确的。有什么错误吗?另一方面,我查看了您的演示,但在从输入移动并提交表单后,我需要进行验证,如示例 geektantra.com/2009/09/jquery-live-form-validation 所示。你能举一个像那个页面上包含隐藏字段的例子吗?提前致谢。
  • @H.Johnson,它不是 jQuery validation 插件。你应该更具体地问这个问题。
  • @Zabavsky:感谢您的帮助。抱歉,但我之前从未使用过这种验证插件,并且由于我使用了“jquery.validate.js”,所以我认为我使用了“jQuery 验证插件”。无论如何,我需要一个执行以下要求的示例: 1) 当然我想使用 jQuery Validation 插件。我希望在切换到另一个控件(实时验证)后验证字段。 2)除此之外,如果用户直接按下提交按钮,则应验证所有必要的字段,如第一步所述。在此先感谢...
猜你喜欢
  • 2012-07-05
  • 2015-01-24
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2019-01-29
  • 2012-06-28
相关资源
最近更新 更多