jquery验证插件,我如何验证字段但不需要它

时间:2011-08-29 18:55:26

标签: jquery decimal jquery-validate

我正在使用jquery验证插件来验证表单的客户端。

我有一个必需的字段StandardPrice,需要是一个数字。下面的验证码非常有效。

我有一个名为MinPrice的形式的另一个字段是可选的,但我确实想验证如果用户在那里放了一个它是一个数字。我想通过删除 required:true 但仍然有数字:true 它会支持这个但似乎它不允许我将此字段留空(即使我没有必需:true 设置)

jquery验证插件是否支持验证一个字段,如果它已填充,但如果它是空白则不管它。

这是我的代码:

 $("#productForm").validate({
     rules: {
         StandardPrice: {
             required: true,
             number: true
         },
         MinPrice: {
             number: true
         }
     }
 });

以下是字段为空时验证的屏幕截图:

enter image description here

这是我的html输出(我的实际代码是使用了很多HTML.helpers()和Html.ValidationMessageFor()

 <form action="/Product/EditProduct" id="productForm" method="post">    <fieldset>
    <legend>Product</legend>

    <div class="editor-label">
        <label for="Product_Name">Name</label>
    </div>

    <div class="editor-field">
        <input class="required" id="Product_Name" name="Product.Name" style="width:450px;" type="text" value="Linzer Tart" />
        <span class="field-validation-valid" data-valmsg-for="Product.Name" data-valmsg-replace="true"></span>
    </div>

    <div class="editor-label">

        <label for="Product_StandardPrice">StandardPrice</label>
    </div>
    <div class="editor-field">
        <input data-val="true" data-val-number="The field StandardPrice must be a number." data-val-required="The StandardPrice field is required." id="Product_StandardPrice" name="Product.StandardPrice" style="width:45px;text-align:right;" type="text" value="1.50" />
        <span class="field-validation-valid" data-valmsg-for="Product.StandardPrice" data-valmsg-replace="true"></span>
    </div>

    <div class="editor-label">
        <label for="Product_MiniPrice">MiniPrice</label>

    </div>
    <div class="editor-field">
        <input data-val="true" data-val-number="The field MiniPrice must be a number." data-val-required="The MiniPrice field is required." id="Product_MiniPrice" name="Product.MiniPrice" style="width:45px;text-align:right;" type="text" value="0.00" />
        <span class="field-validation-valid" data-valmsg-for="Product.MiniPrice" data-valmsg-replace="true"></span>
    </div>

    <input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Product_Id" name="Product.Id" type="hidden" value="102" />

    <p>
        <input type="submit" value="Save" />

    </p>
</fieldset>

2 个答案:

答案 0 :(得分:4)

number: true应该像您期望的那样工作live demo

  • 将字段留空=&gt;表格提交
  • 在字段中输入有效数字=&gt;表格提交
  • 输入无效的数字=&gt;显示错误消息且表单未提交

显示标记后,您的字段名称和jQuery验证名称之间似乎存在一些不一致。例如,您的输入名为Product.StandardPrice,而不是StandardPrice,这是您在jQuery.validate中使用的。因此,您的验证规则实际上都不会应用,因为它没有任何相应的表单元素。所以解决它:

$("#productForm").validate({
     rules: {
         'Product.StandardPrice': {
             required: true,
             number: true
         },
         'Product.MiniPrice': {
             number: true
         }
     }
});

另请注意,它应为Product.MiniPrice而非Product.MinPrice。请保持一致。

备注:查看您的标记很明显,这是由ASP.NET MVC 3 HTML帮助程序生成的。为什么使用自定义jQuery.validate规则而不是默认的不显眼的规则?

答案 1 :(得分:0)

请提供您的HTML。这对我来说很好:

<input id="StandardPrice" name="StandardPrice" type="textbox" />
<input id="MinPrice" name="MinPrice" type="textbox" />

$("#productForm").validate({
 rules: {
     StandardPrice: {
         required: true,
         number: true
     },
     MinPrice: {
         number: true
     }
 }

});