我正在使用jquery验证插件来验证表单的客户端。
我有一个必需的字段StandardPrice,需要是一个数字。下面的验证码非常有效。
我有一个名为MinPrice的形式的另一个字段是可选的,但我确实想验证如果用户在那里放了一个它是一个数字。我想通过删除 required:true 但仍然有数字:true 它会支持这个但似乎它不允许我将此字段留空(即使我没有必需:true 设置)
jquery验证插件是否支持验证一个字段,如果它已填充,但如果它是空白则不管它。
这是我的代码:
$("#productForm").validate({
rules: {
StandardPrice: {
required: true,
number: true
},
MinPrice: {
number: true
}
}
});
以下是字段为空时验证的屏幕截图:
这是我的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>
答案 0 :(得分:4)
number: true
应该像您期望的那样工作live demo。
显示标记后,您的字段名称和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
}
}
});