Asp.net中DatePicker异常:仅一个日期选择器可弹出日期面板
解决Asp.net中两个DatePicker仅一个弹出的问题
核心问题1:DatePicker仅绑定了第一个文本框
你的jQuery选择器$('[id*=txtDate]')只匹配ID包含txtDate的元素,但第二个文本框的ID是textDate,无法被这个选择器命中,导致第二个文本框没有初始化DatePicker组件。
解决办法:
推荐给两个文本框添加统一的CSS类(更易维护):
- 修改前端文本框代码,添加
date-picker类:
<div class="form-group left"> <label for="invoicedate" class="label-title"> Invoice Date : </label> <asp:TextBox ID="txtDate" runat="server" class="form-input date-picker" required="required" ReadOnly="true" placeholder="mm/dd/yyyy" OnClick="Datebtn_Click"></asp:TextBox> </div> <div class="form-group left"> <label for="shipmentdate" class="label-title"> Shipment Date : </label> <asp:TextBox ID="textDate" runat="server" class="form-input date-picker" required="required" ReadOnly="true" placeholder="mm/dd/yyyy" OnClick="Addbtn_Click"></asp:TextBox> </div>
- 修改jQuery脚本,通过类选择器绑定:
<script type="text/javascript"> $(function () { $('.date-picker').datepicker({ changeMonth: true, changeYear: true, format: "dd/mm/yyyy", language: "tr" }); }); </script>
核心问题2:后台事件获取错误的文本框值
Addbtn_Click方法里,你获取的是txtDate.UniqueID对应的值,而非第二个文本框textDate的,会导致点击第二个文本框时弹出错误的日期值。同时两个RegisterStartupScript的key重复(都是alert),会导致脚本被覆盖。
解决办法:
修改后台代码:
protected void Datebtn_Click(object sender, EventArgs e) { string dt = Request.Form[txtDate.UniqueID]; ClientScript.RegisterStartupScript(this.GetType(), "alert-invoice", "alert('Selected Date:" + dt + "'); ", true); } protected void Addbtn_Click(object sender, EventArgs e) { string dt = Request.Form[textDate.UniqueID]; ClientScript.RegisterStartupScript(this.GetType(), "alert-shipment", "alert('Selected Date:" + dt + "'); ", true); }
额外注意:ReadOnly属性的潜在问题
设置ReadOnly="true"后,部分浏览器可能会阻止点击事件触发,导致DatePicker无法弹出。可以去掉该属性,改用onfocus="this.blur()"禁止手动输入:
<asp:TextBox ID="txtDate" runat="server" class="form-input date-picker" required="required" placeholder="mm/dd/yyyy" OnClick="Datebtn_Click" onfocus="this.blur()"></asp:TextBox> <asp:TextBox ID="textDate" runat="server" class="form-input date-picker" required="required" placeholder="mm/dd/yyyy" OnClick="Addbtn_Click" onfocus="this.blur()"></asp:TextBox>
内容的提问来源于stack exchange,提问作者kimk
相关产品推荐
相关产品推荐

