在datepicker中选择日期会触发错误的事件

时间:2014-06-11 06:51:44

标签: javascript jquery asp.net javascript-events jquery-ui-datepicker

我的网站上有两个元素

<asp:DropDownList CssClass="SelectionDDL" ID="ddlClientMapFilter" runat="server"></asp:DropDownList>

和页面上的其他地方

<asp:TextBox ID="tbFromDate" runat="server" OnTextChanged="ddl_ReportFilterChanged"></asp:TextBox>
<asp:TextBox ID="tbToDate" runat="server" OnTextChanged="ddl_ReportFilterChanged"></asp:TextBox>

中的javascript中
$(function(){
    $(document).on("change", $("#ddlClientMapFilter"), function() {
         RefreshMapList();
    });
});

以及Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(OnAsychPostback);

页面上的其他位置
function OnAsychPostback(s, e) {
$("#tbFromDate").datepicker({
            defaultDate: "-1",
            changeMonth: true,
            numberOfMonths: 3,
            onClose: function (selectedDate) {
                $("#tbToDate").datepicker("option", "minDate", selectedDate);
            }
        });
        $("#tbToDate").datepicker({
            //defaultDate: "+1w",
            changeMonth: true,
            numberOfMonths: 3,
            onClose: function (selectedDate) {
                $("#tbFromDate").datepicker("option", "maxDate", selectedDate);
            }
        });
}

现在是奇怪的部分。

除了每次使用任何日期选择器选择日期时,下拉事件都会被触发,所以一切似乎都在起作用。我知道解决方案是简单的添加如果并检查事件的目标是下拉但我想知道如何不触发该事件,我还有大量其他事件附加在那个事件旁边而且只有这个被解雇了。

显然某处有一个错误,但我不知道如何找到任何想法?

1 个答案:

答案 0 :(得分:0)

这是因为on()的第二个参数(在委托语法中)必须是选择器字符串,而不是jQuery对象

$(function(){
    $(document).on("change", "#ddlClientMapFilter", function() {
         RefreshMapList();
    });
});

演示:Fiddle

在演示中,第一个处理程序仅在#x元素发生更改时触发,但在更改任何输入时触发第二个处理程序。

根本原因似乎是如果第二个参数不是字符串,那么它被视为数据参数(您可以检查事件对象的data属性来测试它)... < / p>

演示:Fiddle