2010-03-11 62 views
1

我有一個jQuery的日期選擇器默認呈現當前日期爲一個完整的日曆。在呈現之前,我從服務器獲取需要爲當月突出顯示的天的ajax日期列表。代碼如下:jQuery DatePicker - 如何突出每個月的特定日子?

$.get("Note/GetActionDates/?orgID=" + orgID + "&month=" + month +"&year=" + year, 
     null, function(result) { 
      RenderCalendar(result); 
     }, "json"); 


function RenderCalendar(dates) { 
     $("#actionCal").datepicker({ dateFormat: 'dd/mm/yy', beforeShowDay: function(thedate) { 
      var theday = thedate.getDate(); 
      if ($.inArray(theday, dates) == -1) { 
       return [true, "", ""]; 
      } 
      else { 
       return [true, "specialDate", "Actions Today"]; 
      } 
     } 
     }); 
    } 

這很好,但我希望當用戶點擊到不同的月份時突出顯示的日期更新。我可以用下面的代碼修改jquery datepicker初始化代碼:

onChangeMonthYear: function(year, month, inst) { 
      //get new array of dates for that month 
      $.get("Note/GetActionDates/?orgID=" + orgID + "&month=" + month + "&year=" + year, 
      null, function(result) { 
       RenderCalendar(result); 
     }, "json"); 
      } 

但是,這似乎並不奏效。

任何人都可以告訴我我做錯了什麼嗎?謝謝! :)

更新 - 工作代碼

感謝您的幫助!

我已經調整了代碼petersendidit如下,它現在可以工作。要添加更多的代碼來刪除日期數組中的重複日期,但除此之外它的一切都很好。

$("#actionCal").datepicker({ 
      dateFormat: 'dd/mm/yyyy', 
      beforeShowDay: function(thedate) { 
       var theday = thedate.getDate() + "/" + (thedate.getMonth() + 1) + "/" + thedate.getFullYear(); 
       if ($.inArray(theday, actionCalDates) == -1) { 
        return [true, "", ""]; 
       } else { 
        return [true, "specialDate", "Actions Today"]; 
       } 
      }, 
      onChangeMonthYear: function(year, month, inst) { 
       dateCount = 0; 
       getDates(orgID, month, year); 
      } 

     }); 

function getDates(orgID, month, year) { 
     dateCount += 1; 
     if (dateCount < 4) { 
      $.ajax({ 
       url: "Note/GetActionDates/", 
       data: { 
        'orgID': orgID, 
        'month': month, 
        'year': year 
       }, 
       type: "GET", 
       dataType: "json", 
       success: function(result) { 
        actionCalDates = actionCalDates.concat(result); 
        getDates(orgID, month + 1, year); 
        getDates(orgID, month - 1, year); 
       } 
      }); 
     } 
    } 

回答

1

的問題是,你正在Ajax請求onChangeMonthYear和重新初始化日期選擇器,通過時間的Ajax請求完成新的月份已經繪製。

你可以做的是加載當前月份和上個月和下個月的「日期」。然後onChangeMonthYear獲取更多日期並將其添加到您的datesArray。

像這樣(未經):

var actionCalDates = array(); 
function getDates(orgID, month, year) { 
    $.ajax({ 
     url:"Note/GetActionDates/", 
     data: { 
      'orgID':orgID, 
      'month':month, 
      'year':year 
     }, 
     type:"GET", 
     dataType: "json", 
     success: function(result) { 
      actionCalDates.concat(result); 
      getDates(orgID, month+1, year); 
      getDates(orgID, month-1, year); 
     } 
    }); 
} 

$("#actionCal").datepicker({ 
    dateFormat: 'dd/mm/yy', 
    beforeShowDay: function(thedate) { 
     var theday = thedate.getDate(); 
     if ($.inArray(theday, actionCalDates) == -1) { 
      return [true, "", ""]; 
     } else { 
      return [true, "specialDate", "Actions Today"]; 
     } 
    }, 
    onChangeMonthYear: function(year, month, inst) { 
     getDates(orgID, month, year); 
    } 
}); 
+0

調整了代碼一點,它的偉大工程!謝謝 – Sergio 2010-03-12 13:13:04

+0

Sergio:你的代碼是怎麼樣的?我在執行完你所做的很多事情之後,我只想看看你是如何實現代碼的,我正在使用asp.net – 2010-04-24 17:16:29

+0

如果你有兩個日曆域,該怎麼辦?如果您將第一個字段放回幾個月,則第二個字段將在您點擊它時爲空,因爲它沒有可用的日期。你如何解決這個問題? – Jeff 2014-07-02 12:28:52

相關問題