【问题标题】:Jquery datepicker validation is not working (without the use of datepicker by editing the textbox)Jquery datepicker 验证不起作用(通过编辑文本框不使用 datepicker)
【发布时间】:2018-01-04 03:32:42
【问题描述】:

我正在尝试验证datepicker,因为startDate 应始终小于EndDate。如果我手动更改日期,则 StartDate 有效,但 EndDate 无效。

我的JavaScript代码:

$(document).ready(function () {
       $("#StartDate").datepicker({
        numberOfMonths: 1,
        onSelect: function (selected) {
            $("#EndDate").datepicker("option", "minDate", selected)
        }
    });
      $("#EndDate").datepicker({
       numberOfMonths: 1,
        onSelect: function (selected) {
            $("#StartDate").datepicker("option", "maxDate", selected)
        }
    });

});

我的 .cshtml 代码

 <div class="col-sm-6">
    <div class="form-group">
        @Html.LabelFor(m => m.StartDate)
        @Html.TextBoxFor(m => m.StartDate, new { @class = "form-control", placeholder = "Enter start date" })
        @Html.ValidationMessageFor(m => m.StartDate, "", new { @class = "error" })
    </div>
</div>

<div class="col-sm-6">
    <div class="form-group">
        @Html.LabelFor(m => m.EndDate)
        @Html.TextBoxFor(m => m.EndDate, new { @class = "form-control", placeholder = "Enter finish date" })
        @Html.ValidationMessageFor(m => m.EndDate, "", new { @class = "error" })
    </div>
</div>

请任何人帮助我。提前谢谢!

【问题讨论】:

  • 我认为您的代码没有任何问题。您可以添加整个视图和您的文件参考吗??
  • @raj 下面是运行示例
  • @JibinBalachandran,在正常情况下,它工作得很好。但是只有当我们手动更改EndDate 时才会出现问题。首先,请通过在当前日期之前写入任何日期(如01/16/2010)手动更改开始日期,它利用日历在StartDate 字段中显示该特定日期,但是当我们更改时,相同的日历不适用于EndDate当前日期到大于提供日期的任何日期,例如01/22/2016。请指导我。
  • @Raj 我没有发现您的代码有任何问题。我已经创建了一个相同的 jsfiddle。 jsfiddle.net/Jibin/nh6eoj03/534
  • @JibinBalachandran,是的,这个小提琴按预期工作。但是请尝试手动更改EndDate,它没有利用日历。

标签: jquery asp.net-mvc jquery-ui-datepicker


【解决方案1】:

如果您希望手动更改日期(不通过编辑文本框使用 datepicker),请编写一个 on change 函数并相应地设置 datepickers 的最大值。

将以下函数添加到您的 js 代码中。

$('#EndDate').on('change',function(){
    var selected=$('#EndDate').val();
    $("#StartDate").datepicker("option", "maxDate", selected)
});

 $('#StartDate').on('change',function(){
    var selected=$('#StartDate').val();
    $("#EndDate").datepicker("option", "minDate", selected)
});

DEMO

【讨论】:

  • 谢谢@Jibin。这就是我一直在寻找的。​​span>
【解决方案2】:

您好,我创建了一个类似的演示。 我认为您是否在页面的头部编写 JavaScript 代码,只需在视图的末尾编写相同的代码即可。

型号

public class DemoModel
{
    [Display(Name = "StartDate")]
    [Required(ErrorMessage = "Please Choose StartDate")]
    public DateTime? StartDate { get; set; }

    [Display(Name = "EndDate")]
    [Required(ErrorMessage = "Please Choose EndDate")]
    public DateTime? EndDate { get; set; }
}

查看

@model DemoMVC.Models.DemoModel
    @{ Layout = null;}
@{
    ViewBag.Title = "Home Page";
}

<script src="~/Scripts/datetimepicker/jquery-1.12.4.js"></script>
<script src="~/Scripts/datetimepicker/jqueryui.js"></script>
<link href="~/Scripts/datetimepicker/jqueryui.css" rel="stylesheet" />

<div class="col-sm-6">
    <div class="form-group">
        @Html.LabelFor(m => m.StartDate)
        @Html.TextBoxFor(m => m.StartDate, new { @class = "form-control", placeholder = "Enter start date" })
        @Html.ValidationMessageFor(m => m.StartDate, "", new { @class = "error" })
    </div>
</div>

<div class="col-sm-6">
    <div class="form-group">
        @Html.LabelFor(m => m.EndDate)
        @Html.TextBoxFor(m => m.EndDate, new { @class = "form-control", placeholder = "Enter finish date" })
        @Html.ValidationMessageFor(m => m.EndDate, "", new { @class = "error" })
    </div>
</div>

<script type="text/javascript">
    $(document).ready(function () {
        $("#StartDate").datepicker({
            numberOfMonths: 1,
            onSelect: function (selected) {
                $("#EndDate").datepicker("option", "minDate", selected)
            }
        });
        $("#EndDate").datepicker({
            numberOfMonths: 1,
            onSelect: function (selected) {
                $("#StartDate").datepicker("option", "maxDate", selected)
            }
        });

    });

</script>

输出

【讨论】:

  • Enddate 仍然无法按预期正常工作。首先,请通过在当前日期之前写入任何日期(如01/16/2010)来手动更改开始日期,它利用日历在StartDate 字段中显示该特定日期,但是当我们更改时,相同的日历不适用于EndDate当前日期到大于提供日期的任何日期,例如01/22/2016。请给我适当的指导。在正常情况下,它工作得很好。但是只有当我们手动更改EndDate时才会出现问题。
  • @raj on keypress 或 keydown 事件不允许用户手动输入日期。显示警报请选择日期。如果对您有帮助,请将其标记为答案。
  • 有什么方法可以创建一个下拉日历,以便用户可以从中选择月份和年份。尽管手动更改日期,我认为这很容易。
  • @raj 在 datepicker 中并没有改变,只是对文本框的验证,您不允许用户输入日期,只需从 datepicker 中选择。
  • @raj 在 datepicker 中并没有改变,只是对文本框的验证,您不允许用户输入日期,只需从 datepicker 中选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 2011-05-14
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多