自从我的Datepicker添加OnSelect后,TextChanged事件不再为此控件触发.我的代码如下:
$(function() { $("#<%=txtStartDate.ClientID %>").datepicker({ minDate: 0,dateFormat: 'dd-M-yy',onSelect: function(dateText,inst) { var theDate = new Date(Date.parse($(this).datepicker('getDate'))); $("#<%=txtEndDate.ClientID %>").datepicker('option','minDate',theDate); } }); $("#<%=txtEndDate.ClientID %>").datepicker({ dateFormat: 'dd-M-yy' }); }); <%-- etc ---- %> <asp:TextBox ID="txtStartDate" runat="server" AutoPostBack="true" OnTextChanged="txtStartDate_TextChanged"></asp:TextBox>
我的另一个datepicker(txtEndDate)TextChanged事件确实触发,因此只能将其放到为txtStartDate控件定义的OnSelect上.
非常感谢任何帮助.干杯!
解决方法
在对jQuery UI Datepicker源进行简短检查后,解决方案就是自己触发更改事件
... onSelect: function(dateText,inst) { var theDate = new Date(Date.parse($(this).datepicker('getDate'))); $("#<%=txtEndDate.ClientID %>").datepicker('option',theDate); if (inst.input) inst.input.trigger('change'); } ...
原因是jQuery UI Datepicker源代码中的以下几行
if (onSelect) // trigger custom callback onSelect.apply((inst.input ? inst.input[0] : null),[dateStr,inst]); else if (inst.input) // fire the change event inst.input.trigger('change');
正如您所看到的那样,jQuery UI Datepicker会在默认情况下触发更改事件,如果datepicker实例是输入字段,但如果您指定了自定义onSelect处理程序,则不会触发它(如您所做).
您可能会争辩说实际上这是正确的行为,因为它可以保证您的最大可配置性.您可以通过这种方式决定是否要进行更改事件.
但我同意这种行为可能应该记录在案.