简体   繁体   English

最小最大价格范围验证不适用于jquery.validate.js

[英]min max price range validation not working with jquery.validate.js

form validation i'm using https://jqueryvalidation.org . 表单验证我正在使用https://jqueryvalidation.org I have implemented custom validation rules through depends property. 我已经通过depends属性实现了自定义验证规则。

following are validation error rules: 以下是验证错误规则:

  • if both price box is not selected error won't show. 如果未选中两个价格框,则不会显示错误。

  • if one price box (one out of both) selected ,validation error will show that user needs to select both. 如果选择了一个价格框(两个中的一个),则验证错误将显示用户需要同时选择两个。

  • if both are selected, then max price value must be greater than min price . 如果两者都被选中,那么最大价格值必须大于最低价格。

please find below my code: 请在下面找到我的代码:

in my code every condition is satisfying but the last rule means max price will be always greater than min price is not working. 在我的代码中,每个条件都令人满意,但最后一条规则意味着最高价格总是大于最低价格不起作用。 Its checking true but validation is not triggering. 它的检查是正确的,但验证不会触发。

here is jsfiddle link 这里是jsfiddle链接

$(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");
        }
    });
});

here is jsfiddle link 这里是jsfiddle链接

You can do this by using max and min rules. 您可以使用maxmin规则来完成此操作。 Here is the fiddle . 这是小提琴

Code: 码:

$(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");
    }
  });
});

For required rule is the method validateRequiredBoth() and for min and max you can configure a rule that requires a parameter, along with a depends callback. 对于必需的规则,方法是validateRequiredBoth() ,对于minmax,您可以配置需要参数的规则以及depends回调。

Also modified select fields minrange and maxrange . 还修改了选择字段minrangemaxrange

Here is the code: 这是代码:

 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> 

Successfully run with your requirement please see this code and jsfiddle : 成功运行您的要求请参阅此代码和jsfiddle:

Note : don't forgot to add JS files in your page 注意:不要忘记在页面中添加JS文件

HTML Code: 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 Code : 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');
    }
});

Live jsfiddle Example : https://jsfiddle.net/rajnikpatel/4hnxhmrs/ Live jsfiddle示例: https ://jsfiddle.net/rajnikpatel/4hnxhmrs/

For required rule is the method CheckValidate(FormName) and for min and max you can configure a rule that requires a parameter 对于必需的规则,方法是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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM