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