最小最大价格范围验证不适用于 jquery.validate.js
Posted
技术标签:
【中文标题】最小最大价格范围验证不适用于 jquery.validate.js【英文标题】:min max price range validation not working with jquery.validate.js 【发布时间】:2016-09-18 05:06:23 【问题描述】:我正在使用https://jqueryvalidation.org 进行表单验证。 我已经通过依赖属性实现了自定义验证规则。
以下是验证错误规则:
如果两个价格框均未选中,则不会显示错误。
如果选择了一个价格框(两者中的一个),验证错误将显示用户需要同时选择两者。
如果两者都被选中,则最高价格值必须大于最低价格。
请在下面找到我的代码:
在我的代码中,每个条件都满足,但最后一条规则意味着最高价格将始终大于最低价格不起作用。它的检查是真的,但验证没有触发。
这里是jsfiddle link
$(document).ready(function()
$("#form1").validate(
debug: true,
onkeyup: false,
onfocusout: false,
onclick: false,
rules:
minrange:
required:
depends: function()
var min_range = $("#min-range").find(':selected').val(),
max_range = $("#max-range").find(':selected').val();
if (min_range == "" && max_range == "")
return false;
else if (min_range != "" && max_range == "")
return true;
else if (min_range == "" && max_range != "")
return true;
else if (parseInt(max_range) < parseInt(min_range))
return true;
else
return false;
,
maxrange:
required:
depends: function()
var min_range = $("#min-range").find(':selected').val(),
max_range = $("#max-range").find(':selected').val();
if (min_range == "" && max_range == "")
return false;
else if (min_range != "" && max_range == "")
return true;
else if (min_range == "" && max_range != "")
return true;
else if (parseInt(max_range) < parseInt(min_range))
return true;
else
return false;
,
,
submitHandler: function(formName, event)
alert("sucess");
);
);
这里是jsfiddle link
【问题讨论】:
卫生署! ;) 没关系...在 5 分钟内删除.. 你好,@Arka 请看我的代码它工作正常.. :) 【参考方案1】:您可以通过使用max 和min 规则来做到这一点。这是fiddle。
代码:
$(document).ready(function()
var $min_range = $("#min-range"),
$max_range = $("#max-range");
$("#form1").validate(
debug: true,
onkeyup: false,
onfocusout: false,
onclick: false,
rules:
minrange:
required: function()
return !($min_range.val() === "" && $max_range.val() === "");
,
max: function()
if ($max_range.val() !== "")
return $max_range.val();
,
maxrange:
required: function()
return !($min_range.val() === "" && $max_range.val() === "");
,
min: function()
if ($min_range.val() !== "")
return $min_range.val();
,
submitHandler: function(formName, event)
alert("sucess");
);
);
【讨论】:
【参考方案2】:对于required,规则是validateRequiredBoth()
方法,对于min 和max,您可以配置需要参数的规则以及depends
回调。
还修改了选择字段minrange
和maxrange
。
代码如下:
var $min = $('#min-range'),
$max = $('#max-range');
function getNumber(num)
var intNum = parseInt(num);
return !isNaN(intNum) ? intNum : 0;
function getMin()
return getNumber($min.find('option:selected').val());
function getMax()
return getNumber($max.find('option:selected').val());
function validateRequiredBoth()
return !(getMin() === 0 && getMax() === 0);
$('#form1').validate(
debug: true,
onkeyup: false,
onfocusout: false,
onclick: false,
rules:
minrange:
required: function()
return validateRequiredBoth();
,
max:
param: function()
return getMax();
,
depends: function()
return getMax() > 0 && getMin() > getMax();
,
maxrange:
required: function()
return validateRequiredBoth();
,
min:
param: function()
return getMin();
,
depends: function()
return getMin() > getMax();
,
submitHandler: function(formName, event)
alert('sucess');
);
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.10.0/jquery.validate.min.js"></script>
<form id="form1" name="form1">
Min price:
<select class="form-control form-control-all" id="min-range"name="minrange">
<option value="">Min</option>
<option value="10000">$10,000</option>
<option value="20000">$20,000</option>
<option value="50000">$50,000</option>
<option value="75000">$75,000</option>
<option value="100000">$100,000</option>
<option value="125000">$125,000</option>
<option value="150000">$150,000</option>
<option value="175000">$175,000</option>
<option value="200000">$200,000</option>
<option value="300000">$300,000</option>
<option value="500000">$500,000</option>
<option value="750000">$750,000</option>
<option value="1000000">$1M</option>
<option value="1500000">$1.5M</option>
<option value="2000000">$2M</option>
<option value="2500000">$2.5M</option>
<option value="3000000">$3M</option>
<option value="3500000">$3.5M</option>
<option value="4000000">$4M</option>
<option value="4500000">$4.5M</option>
<option value="5000000">$5M</option>
<option value="10000000">$10M+</option>
</select>
<br/>
Max price:
<select class="form-control form-control-all" id="max-range" name="maxrange">
<option value="">Max</option>
<option value="10000">$10,000</option>
<option value="20000">$20,000</option>
<option value="50000">$50,000</option>
<option value="75000">$75,000</option>
<option value="100000">$100,000</option>
<option value="125000">$125,000</option>
<option value="150000">$150,000</option>
<option value="175000">$175,000</option>
<option value="200000">$200,000</option>
<option value="300000">$300,000</option>
<option value="500000">$500,000</option>
<option value="750000">$750,000</option>
<option value="1000000">$1M</option>
<option value="1500000">$1.5M</option>
<option value="2000000">$2M</option>
<option value="2500000">$2.5M</option>
<option value="3000000">$3M</option>
<option value="3500000">$3.5M</option>
<option value="4000000">$4M</option>
<option value="4500000">$4.5M</option>
<option value="5000000">$5M</option>
<option value="10000000">$10M+</option>
</select>
<br/>
<input type="submit">
</form>
【讨论】:
嗨@Arka,回答了你的问题..你能检查一下吗?【参考方案3】:按照您的要求成功运行,请查看此代码和 jsfiddle:
注意:别忘了在你的页面中添加JS文件
HTML 代码:
<form id="form1" name="form1">
Min price:
<select class="form-control form-control-all" id="min-range" data-name="Price Range Min" name="minrange" title="Min price is required" aria-required="true">
<option value="">Min</option>
<option value="10000">$10,000</option>
<option value="20000">$20,000</option>
<option value="50000">$50,000</option>
<option value="75000">$75,000</option>
<option value="100000">$100,000</option>
<option value="125000">$125,000</option>
<option value="150000">$150,000</option>
<option value="175000">$175,000</option>
<option value="200000">$200,000</option>
<option value="300000">$300,000</option>
<option value="500000">$500,000</option>
<option value="750000">$750,000</option>
<option value="1000000">$1M</option>
<option value="1500000">$1.5M</option>
<option value="2000000">$2M</option>
<option value="2500000">$2.5M</option>
<option value="3000000">$3M</option>
<option value="3500000">$3.5M</option>
<option value="4000000">$4M</option>
<option value="4500000">$4.5M</option>
<option value="5000000">$5M</option>
<option value="10000000">$10M+</option>
</select>
<br /> Max price:
<select class="form-control form-control-all" id="max-range" data-name="Price Range Max" name="maxrange" title="Max price is required" aria-required="true">
<option value="">Max</option>
<option value="10000">$10,000</option>
<option value="20000">$20,000</option>
<option value="50000">$50,000</option>
<option value="75000">$75,000</option>
<option value="100000">$100,000</option>
<option value="125000">$125,000</option>
<option value="150000">$150,000</option>
<option value="175000">$175,000</option>
<option value="200000">$200,000</option>
<option value="300000">$300,000</option>
<option value="500000">$500,000</option>
<option value="750000">$750,000</option>
<option value="1000000">$1M</option>
<option value="1500000">$1.5M</option>
<option value="2000000">$2M</option>
<option value="2500000">$2.5M</option>
<option value="3000000">$3M</option>
<option value="3500000">$3.5M</option>
<option value="4000000">$4M</option>
<option value="4500000">$4.5M</option>
<option value="5000000">$5M</option>
<option value="10000000">$10M+</option>
</select>
<br />
<input type="submit">
</form>
JS代码:
var $min = $('#min-range'),
$max = $('#max-range');
function getNumber(num)
var intNum = parseInt(num);
return !isNaN(intNum) ? intNum : 0;
function getMin()
return getNumber($min.find('option:selected').val());
function getMax()
return getNumber($max.find('option:selected').val());
function validateRequiredBoth()
if (getMin() == "" && getMax() == "")
return true;
else if (getMin() == "" && getMax() != "")
return true;
else if (getMin() != "" && getMax() == "")
return true;
else
return false;
$('#form1').validate(
debug: true,
onkeyup: false,
onfocusout: false,
onclick: false,
rules:
minrange:
required: function ()
return validateRequiredBoth();
,
max:
param: function ()
return getMax();
,
depends: function ()
return getMax() > 0 && getMin() > getMax();
,
maxrange:
required: function ()
return validateRequiredBoth();
,
min:
param: function ()
return getMin();
,
depends: function ()
return getMin() > getMax();
,
submitHandler: function (formName, event)
alert('sucess');
);
现场 jsfiddle 示例:https://jsfiddle.net/rajnikpatel/4hnxhmrs/
【讨论】:
【参考方案4】:对于必需的规则是方法 CheckValidate(FormName),对于 min 和 max,您可以配置一个需要参数的规则
function CheckValidate(FormName)
try
//if (!flag)
// return false;
var flag2 = true;
$('#' + FormName + ' input[data-minlength][data-maxlength]').each(function ()
var x = this.id;
var dataminlength = this.attributes['data-minlength'].value;
var datamaxlength = this.attributes['data-maxlength'].value;
if (this.value.length < dataminlength || this.value.length > datamaxlength)
$('#' + x).css("background-color", "#f8e8e8").css("border", "1px solid red");
$('#lblValidationSummary').append('حداقل و حداکثر تعداد کاراکتر مجاز برای ' + this.attributes['placeholder'].value + ' باید بین ' + dataminlength + ' تا ' + datamaxlength + ' باشد' + '<br/>');
flag = false;
flag2 = false;
else
$('#' + x).css("background-color", "#fff").css("border", "1px solid gray");
);
//if (!flag)
// return false;
return flag;
catch(err)
alert(err);
return false;
【讨论】:
以上是关于最小最大价格范围验证不适用于 jquery.validate.js的主要内容,如果未能解决你的问题,请参考以下文章