0

我有我的网站上两个元素选择日期触发错误事件

<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); 
      } 
     }); 
} 

现在奇怪的部分。

一切似乎都在工作,除了每次使用任何日期选择器选择日期时,下拉事件被触发。我知道解决方案很简单,如果添加并检查是否存在事件的目标是下拉列表,但我想知道如何解除该事件,还有其他事件旁边还有很多其他事件,只有这一个被解雇。

显然有一个地方的错误,但我不知道如何找到它的任何想法?

回答

0

这是因为第二个参数on()(在代表团语法)必须是一个选择的字符串,而不是一个jQuery对象

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

演示:Fiddle

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

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

演示:Fiddle