JQuery Datepicker OnSelect 和 TextChanged 问题

标签 jquery datepicker onselect

自从将 OnSelect 添加到我的 Datepicker 后,该控件不再触发 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>

我的其他日期选择器 (txtEndDate) TextChanged 事件确实触发,因此只能将其归因于为 txtStartDate 控件定义的 OnSelect。

非常感谢对此的任何帮助。干杯!

最佳答案

对 jQuery UI Datepicker 源进行简短检查后,解决方案是自己触发更改事件

...
onSelect: function(dateText, inst) {
    var theDate = new Date(Date.parse($(this).datepicker('getDate')));
    $("#<%=txtEndDate.ClientID %>").datepicker('option', 'minDate', 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');

如您所见,如果 datepicker 实例是一个 input 字段,则 jQuery UI Datepicker 默认会触发 change 事件,但如果您指定了自定义 onSelect 处理程序(就像您所做的那样)。

您可能会说,实际上这是正确的行为,因为它保证了您最大的可配置性。您可以决定是否希望 change 事件以这种方式发生。

但我同意这种行为也许应该被记录下来。

关于JQuery Datepicker OnSelect 和 TextChanged 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1886174/

相关文章:

javascript - 用特定颜色的 li 元素绘画

jquery - 使用 jquery 多次追加表

javascript - 检查网页上的文本框以获取特定字符串

java - JXDatePicker 中的动态 JFormattedTextFields

javascript - 选中所有复选框时取消选中复选框

javascript - 无法识别 JQUERY datetimepicker onSelect

CKEDITOR 内联编辑器工具栏上的文本选择

jquery - 如何消除 jQuery Mobile "slide"过渡的淡入淡出?

javascript - 为什么将 jQuery UI 日期选择器的默认值设置为匿名函数不起作用?

javascript - Jquery Datepicker 上一个,悬停时隐藏的下一个图标