0

日付ピッカー カレンダーでクリックできる一連のイベントをリンクしています。関数の日付形式は正しくonSelect機能しています (dd-mm-yy です)。これで、2013 年 8 月 6 日の活動 (2013 年 6 月 8 日) をクリックしてカレンダーで読むことができます。

一方beforeshowday、クラス「ハイライト」を要素に割り当てる関数は、間違った日付形式を使用します (dd と mm を切り替えます)。tdそのため、カレンダー上で強調表示されている は、クリック可能で作業中tdのアクティビティではなく、間違った月に表示されます。

私のコードを見てください:

var acts = [
    { Title: "En we doen eki wild", Date: new Date("08/06/2013"), Description: "Beschrijving van deze activiteit komt hier te staan" },
    { Title: "Zotte petanque!", Date: new Date("10/06/2013"), Description: ".. en van deze hier" },
    { Title: "Les :-(", Date: new Date("11/06/2013"), Description: "Beschrijving van activiteit" }
];

$("#cal").datepicker({
    dateFormat: 'dd-mm-yy',
    beforeShowDay: function (date) {
        var result = [true, '', null];
        var matching = $.grep(acts, function (event) {
            return event.Date.valueOf() === date.valueOf();
        });

        if (matching.length) {
            result = [true, 'highlight', null];
        }
        return result;
    },
    onSelect: function(dateText) {
        var date,
            selectedDate = new Date(dateText),
            i = 0,
            event = null;

        while (i < acts.length && !event) {
            date = acts[i].Date;

            if (selectedDate.valueOf() === date.valueOf()) {
                event = acts[i];
            }
            i++;
        }
        if (event) {
            $("#acts h3").html(event.Title);
            $("#acts h4").html(event.Date);
            $("#acts .maintext").html(event.Description);
        }
    },
    minDate: 1,

});

これを修正する方法を知っている人はいますか? ありがとう!

JSFiddle の例: http://jsfiddle.net/JT3hp/

4

1 に答える 1

0

JavaScript パーサーが新しい Date("08/06/2013") 形式を理解していないと思います。それを正しく解析する新しい解析関数を作成します。

...
{ Title: "En we doen eki wild", Date: parseDate("08/06/2013"), Description: "Beschrijving van deze activiteit komt hier te staan" },
...

// parse a date in dd-mm-yyyy format
function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  return new Date(parts[2], parts[1]-1, parts[0]);
}

valueOf() メソッドにも問題がありました。

    var matching = $.grep(acts, function (event) {
        return event.Date.toString() === date.toString();
    });

    ...

        if (selectedDate.toString() === date.toString()) {
           event = acts[i];
        }

    ...

また、onSelect の dd-mm-yy で javascript パーサーが失敗すると思うので、再度手動で解析する必要があります。

IE、Chrome、およびFirefoxでテストされたフィドルは次のとおりです。

http://jsfiddle.net/JT3hp/6/

于 2013-05-29T08:52:50.813 に答える