防止用户在日历ASP中阻止的文本框中输入日期

本文关键字:文本 输入 日期 日历 ASP 用户 | 更新日期: 2023-09-27 17:50:54

我有一个文本框,它的右侧有一个日历图标。当我点击图标,日历出现,允许用户选择一个特定的日期。在日历中,用户不能选择前一个日期,并且日历从当前日期起被阻止2年。

现在我必须验证文本框。

  1. 如果用户手动输入任何过去的日期,它给出一个错误"无效日期"——这是正确的
  2. 但是如果用户输入未来日期,即a日期从当前日期算起2年后,系统接受的是不正确的。

所以我想验证文本框,以便用户得到一个错误"无效日期",如果他输入一个日期,现在在日历中可用,我不希望只读文本框。

<script type="text/javascript">
    window.onload = function () {
        var dateToday = new Date();
        $("input.dtpRelease").datepicker({
            showOn: 'button',
            changeYear: true,
            changeMonth:true,
            minDate: dateToday,
            maxDate: "2y",
            buttonImageOnly: true,
            dateFormat: "mm/dd/yy",
            buttonImage: '/Images/icon_calendar_24.png',
        });
   }
<asp:TextBox ID="dtpStartDate" runat="server" Style="width: 80px; margin-top: 5px;" CssClass="form-control dp2 dtpRelease pull-left" MaxLength="100" placeholder="Start Date" Text='<%# MSEncoder.Encoder.HtmlEncode(Convert.ToString( Eval("FulfillmentStartDate"))) %>' onblur="ValidateDate(this)"></asp:TextBox> 
                           <br/><br/><asp:RegularExpressionValidator ID="regExSDate" runat="server" ControlToValidate="dtpStartDate" ForeColor="Red" Display="Dynamic" ValidationExpression="^(((0?[1-9]|1[012])/(0?[1-9]|1'd|2[0-8])|(0?[13456789]|1[012])/(29|30)|(0?[13578]|1[02])/31)/(19|[2-9]'d)'d{2}|0?2/29/((19|[2-9]'d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$" ErrorMessage="Please enter date in MM/DD/YYYY Format"  ValidationGroup="vg" ></asp:RegularExpressionValidator>
                                     <asp:CompareValidator ID="cvStartDate" runat="server" ControlToValidate="dtpStartDate" ErrorMessage="Invalid Start Date" ForeColor="Red" Operator="GreaterThanEqual"  Display="Dynamic" ValidationGroup="FirstPreview" CssClass="validatorMsg" ValueToCompare="<%# DateTime.Today.ToShortDateString() %>" SetFocusOnError="True"  Type="Date" ></asp:CompareValidator> 

防止用户在日历ASP中阻止的文本框中输入日期

为什么要禁用文本框,让用户只通过日期选择器输入日期呢?它将完全像这个演示,但是您可以从文本框

旁边的图像触发日历。

您可以使用下面的函数来检查文本框中的日期是否在范围内

<script>
   function checkDate(d)
   {
       var maxAcceptedDate = new Date()
       maxAcceptedDate.setFullYear(maxAcceptedDate.getFullYear()+2)
       return d <= maxAcceptedDate
   }
</script>

如果你要从你的自定义验证器中调用这个js函数,你需要修改方法以确保它不接受任何参数

<script>
   function checkDate()
   {
      //var d = [get text from your textbox as date]
       var maxAcceptedDate = new Date()
       maxAcceptedDate.setFullYear(maxAcceptedDate.getFullYear()+2)
       return d<=maxAcceptedDate
   }
</script>