7

Date Pickerを初期化した後、いくつかの日付を無効にしようとしました。

次のようにピッカーを初期化しています。

$( document ).ready(function() {
    $('#inputDatetime').pickadate({
        format: 'dd. mmmm yyyy',
        formatSubmit: 'yyyy-mm-dd',
        min: dt,
        selectYears: 2,
        selectMonths: true
    });
});

onChange()ユーザーは、イベントをトリガーするアクションを実行します。このdisableDates()関数は、無効にする日付をさらにいくつか準備し、次のsetメソッドを使用してピッカーに設定します。

function disableDates() {

    var disabledDays = [];

    $.ajax({  
        url: 'partners/getInactiveDays',
        dataType: 'json',
        async: false,
        success: function(data) {

            $.each(data.days, function(i, d) {
                disabledDays.push(parseInt(d.Day.id));
            });
        }
    });

    var $input = $('#inputDatetime').pickadate();
    var picker = $input.pickadate('picker');

    picker.set({
        disable: disabledDays
    });
}

私の場合、disableDays には整数 (平日を参照) とドキュメント ( http://amsul.ca/pickadate.js/date/#disable-dates ) による日付が含まれていることに注意してください。

disableDates()関数が初めてトリガーされると、AJAX で取得した日付が正しく無効になります。2 回目にトリガーされるとすぐに、ピッカーは更新されないように見えます。変更を反映するには、ピッカーを何らかの方法で再度レンダリングする必要があると思います。私がしようとしました 。stop()および.start().render()何の効果もありません。

日付を無効にしてピッカーを正しく更新するにはどうすればよいですか?

4

4 に答える 4

0

ajax リクエストが呼び出されていますか?

一部の古い、迷惑な、非推奨の、完全に機能しないブラウザー (はい、IE、私はあなたのことを言っています) は、ajax 要求をキャッシュに保存し、後続のすべての要求で最初の結果を返します。リクエストを としてマークしていないため、実際には が一度しか呼び出されていないPOST可能性があります。partners/getInactiveDays

リクエストに追加method: 'POST'するか、ランダムな文字列 (POST リクエストが IE8 に保存されることもありました) を使用されていないパラメーター (例: ) として URL に追加して、実行されurl:'partnets/getInactiveDays?randomizer='+new Date().getTime()ていない場合にキャッシュが保存されるのを防ぎます。

于 2015-06-22T15:22:35.097 に答える