2009-12-11 189 views
6

由於將OnSelect添加到我的Datepicker,TextChanged事件不再爲此控件觸發。我的代碼如下:JQuery 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> 

我的其他日期選擇器(txtEndDate)TextChanged事件不火所以只能把它歸結爲在ONSELECT正在爲txtStartDate控件定義。

非常感謝在這一個任何幫助。乾杯!

回答

6

的jQuery UI的日期選擇器的短暫檢查之後源的解決方法就是激發更改事件自己

... 
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的日期選擇器源以下行

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字段,但如果你指定了一個自定義的onSelect處理程序(如你所做的那樣)不會觸發它,則默認情況下jQuery UI Datepicker會觸發change事件。

你可能會爭辯說,實際上這是正確的行爲,因爲它保證了最大的可配置性。您可以決定是否希望change事件以這種方式發生。

但我同意,這種行爲也許應記錄在案。

0

與此類似,我發現,如果你附加的DatePicker到一個文本輸入框,並指定.selectMultiple,然後會出現怪異的行爲。特別是,當你點擊一個已經選好的單元格(爲了取消選中它),它會閃爍但保持選中狀態。發生這種情況是因爲首先單元格未選中,但DatePicker會引發「更改」事件。更改事件會將當前單元格重新打開,因爲日曆已附加到文本輸入!

這是有道理的,在某種程度上:你可能不應該將多個選擇放在一個文本框中。但是這種行爲是無證的,而且很難追蹤,除非你已經知道DatePicker如何理解文本框。