6

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 にのみ配置できます。

これについて何か助けていただければ幸いです。乾杯!

4

3 に答える 3

6

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

この理由は、jQueryUIの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');

ご覧のとおり、jQuery UI Datepickerchangeは、datepickerインスタンスがinputフィールドの場合はデフォルトでイベントを発生させますが、カスタムonSelectハンドラーを指定した場合は発生しません(行ったように)。

最大の構成可能性が保証されるため、実際にはこれが正しい動作であると主張することができます。changeこの方法でイベントを発生させるかどうかを決定できます。

しかし、私はこの振る舞いを文書化する必要があることに同意します。

于 2009-12-11T09:35:02.500 に答える
2

追加するだけです

$('<%=txtStartDate.ClientID %>').trigger('change');

関数の最後までonSelect。次の作業例を検討してください: http://jsbin.com/oqunu/またはバージョンを編集http://jsbin.com/oqunu/edit

または、ロジックを TextChanged によってトリガーされる関数に移動し、onSelect を取り除きます。ここのように: http://jsbin.com/iyajo ; 編集版http://jsbin.com/iyajo/edit

于 2009-12-11T09:38:25.393 に答える
0

同様に、DatePicker をテキスト入力フィールドにアタッチして を指定する.selectMultipleと、奇妙な動作が発生することがわかりました。具体的には、既に選択されているセルをクリックすると (選択を解除するために)、ちらつきますが、選択されたままになります。これは、最初にセルが選択されていないために発生しますが、DatePicker は「変更」イベントをスローします。カレンダーがテキスト入力に添付されているため、変更イベントは現在のセルをオンに戻します!

これはある意味で理にかなっています。おそらく、複数の選択項目を 1 つのテキスト ボックスに貼り付けるべきではありません。ただし、この動作は文書化されておらず、DatePicker がテキスト ボックスを理解する方法を既に知っていない限り、追跡するのはかなり困難です。

于 2010-11-22T20:21:53.487 に答える