Jquery验证的条件

时间:2017-06-15 05:24:09

标签: javascript jquery jquery-validate

我有一个页面,在数据库中添加新记录是主要功能。在给出一个条件后,页面工作正常。其中一个需要添加的字段是日期字段。该页面包含年份日期(2017,2018.2019)。例如,当下拉列表中的选定年份为2017年时,所有输入应为2017年内的日期。输入日期小于或大于2017年不应验证且不被接受。如果dropdwon中选定的年份是2018年或2019年,则相同。接受的输入应与下拉列表中的选定年份相同。

我最初使用Jquery验证来进行验证。(我只是在验证中显示日期部分)

这是下拉列表的HTML

<div class="col-sm-2" id="y_type" style="text-align:left;">
<select class="" style="width: 100%; display:inline-block;">
    @{ 
         DateTime datetime = DateTime.Now;
         for (int i = 0; i <= 2; i++)
      {
           <option>@(datetime.AddYears(+i).ToString("yyyy"))</option>
       }
     }
</select>
 </div>
另一方面

holiday_date 在文本域的ID中

这是在

之前进行验证的jquery部分
 $("form").validate({
        rules:
            { 
                "holiday_date[]": {
                    required: true
                    },
                },
            },


        errorClass: "invalid",
        errorPlacement: function (error, element) {
            $('#ResultDialog p').html("@hmis_resources.Message.msg_80005");
            $('#ResultDialog').modal();
        },
        submitHandler: function (form) {
            ajaxFormSubmit();
        }
    });

我最初做的是创建一个测试或比较日期文本字段和下拉列表值的函数。但这也不起作用。而且我不确定它的位置

 function testdate() {

        $(".holidayBody tr").each(function (key, value) {

            var holiday_date = $(value).find(".holiday_date").val();
            if (typeof holiday_date !== 'undefined') {
                var year = holiday_date.substr(6, 4);
                var month = holiday_date.substr(3, 2);
                var days = holiday_date.substr(0, 2)
                holiday_date = year + '/' + month + '/' + days;

                var dropdownear =  $('#y_type :selected').text();
                var result = year == dropdownear;
                alert(result)
            }

        })
    }

如果有更简单的方法可以实现这一点,我将不胜感激,如果你能分享。

1 个答案:

答案 0 :(得分:1)

你应该为验证器添加一个自定义方法,就像这个小提琴一样:
Validating year from select input.

<script>
  $(document).ready(function() {

    var $select = $("select");

     //I added only the year to the drop down, you should change it to full date.
    for (var i = 0; i < 3; i++) { 
      var year = new Date();
      year.setFullYear(year.getFullYear() + i);
      $select.append("<option value=" + year.getFullYear() + " >" + year.getFullYear() + " </option>");
    }

    // add the rule here
    $.validator.addMethod("thisYearOnly", function(value, element, arg) {

      var selectedYear = value;
      var currentDate = new Date();
      var currentYear = currentDate.getFullYear();

      return currentYear == selectedYear;

    }, "Must select this year");

    // configure your validation
    $("form").validate({
      rules: {
        mydate: {
          thisYearOnly: true
        }
      }
    });


  });
</script>