3

次のコードは、入力に接続された日付ピッカーでは正常に機能しますが、インライン日付ピッカーと一緒に使用すると、beforeshowおよびbeforeshowdayの部分を実行しません。

これを回避するにはどうすればよいですか?

$('.mydate').datepicker({
        showWeek: true,
        firstDay: 1,
        dateFormat: 'yy, m, d',
        minDate: 0,
        maxDate: '+2Y',
        showOtherMonths: true,
        selectOtherMonths: true,
        numberOfMonths: 2,
        beforeShow: function(input, inst) {
            selectdatesElem = $(input).siblings("div").find("select.startdates");
            $(input).siblings("div").find("select.startdates").find("option").each( function() {
                  startDates.push($(this).val())
            });
            $(input).siblings("div").find("select.availdates").find("option").each( function() {
                  eventDates.push($(this).val())
            });
        },
        beforeShowDay: function(date) {
            for (var i = 0; i < eventDates.length; i++) {
                  if (date.getFullYear()+", "+date.getMonth()+", "+date.getDate() == eventDates[i]) {
                        return [false, 'eventDay'];
                  } 
            }
            for (var i = 0; i < startDates.length; i++) {
                  if (date.getFullYear()+", "+date.getMonth()+", "+date.getDate() == startDates[i]) {
                        return [true, 'eventDay'];
                  }
            }
            return [false, ''];
        }, 
        onSelect: function(dateText, input, inst) {
            var selectedDateParts = dateText.split(',');
            selectdatesElem.val(parseInt(selectedDateParts[0]) + ", " + (parseInt(selectedDateParts[1])-1) + ", " + parseInt(selectedDateParts[2])).change();
        }
    });
4

1 に答える 1

0

これを JSLint に渡しましたが、セミコロンがいくつか欠落していて、var iすでに宣言されていました (2 番目の for ループから var を削除します)。セミコロンがない行:

startDates.push($(this).val())
eventDates.push($(this).val())

また、基数パラメーターが欠落しているこの行で戻ってきました。基数は、値の基数 (10 進数、2 進数、16 進数など) です。小数点のみが必要な場合は、val() および parseInt() 関数の最後に ,10 を追加します。

selectdatesElem.val(parseInt(selectedDateParts[0], 10) + ", " + (parseInt(selectedDateParts[1], 10) - 1) + ", " + parseInt(selectedDateParts[2],10 ),10).change();

これらの変更で問題が解決するとは思えませんが、試してみる価値はあります。

もう少し調べてみたらbeforeShowで動くのですが、beforeShowDayを追加すると表示されません。

私はしばらくコードとAPIドキュメントを見て、日付ピッカーと一緒に入力フィールドが必要であるように聞こえました。select 要素から読み取っているように見えますが、beforeShow には必要な入力要素が欠落していると思います。

于 2013-02-20T13:41:56.473 に答える