JQuery Datepicker OnSelect和TextChanged问题

前端之家收集整理的这篇文章主要介绍了JQuery Datepicker OnSelect和TextChanged问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
自从我的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处理程序,则不会触发它(如您所做).

您可能会争辩说实际上这是正确的行为,因为它可以保证您的最大可配置性.您可以通过这种方式决定是否要进行更改事件.

但我同意这种行为可能应该记录在案.

原文链接:https://www.f2er.com/jquery/241543.html

猜你在找的jQuery相关文章