2014-01-17 60 views
0

我已實施代碼以禁用使用beforeShow和beforeShowDay回調Jquery的日曆禁止使用beforeShow和beforeShowDay

以下代碼是用於結合日曆輸入的日期的日期

$("#start_on").datepicker({ 
      onSelect: function(date) { 
       date_check(date); 
      }, minDate: 0, dateFormat: "yy-mm-dd", 
      beforeShow: get_booked, 
      beforeShowDay: disable_if_not_available 
     }); 

是這是結合日曆元件

回調beforeShow

function get_booked(inpput, inst) { 
     var D = new Date(); 
     var month = (inst.selectedMonth == 0 ? D.getMonth() : inst.selectedMonth) + 1; 
     var year = (inst.selectedYear == 0 ? D.getYear() : inst.selectedYear); 
     dis_date = new Array(); 
     $.ajax({ 
      url: BASE_URL + "contest/get_booked", 
      data: {year: year, month: month, id:<?php echo (isset($contest_data->id)) ? $contest_data->id : 0; ?>}, 
      dataType: "json", type: "POST", 
      success: function(data) { 
       for (var d in data) { 
        var D = data[d]; 
        var start = D.start_on; 
        var d = start.split("-"); 
        var sD = new Date(d[0], d[1] - 1, d[2]); 
        var end = D.end_on; 
        var d = end.split("-"); 
        var eD = new Date(d[0], d[1] - 1, d[2]); 
        while (sD <= eD) { 
         dis_date.push(sD.getFullYear() + "-" + (sD.getMonth() + 1) + "-" + sD.getDate()); 
         sD.setDate(sD.getDate() + 1); 
        } 
       } 
      } 
     }); 

    } 

回調beforeShowDay

function disable_if_not_available(date) { 
     var y = date.getFullYear(), m = date.getMonth() + 1, d = date.getDate(); 
     return [dis_date.indexOf(y + "-" + m + "-" + d) == -1]; 
    } 

問題,這是disable_if_not_available獲取調用之前dis_date得到來自get_booked填補。目前disable_if_not_available回報總是正確的,因爲dis_date是空的,所以我想要做的是調用/返回disable_if_not_available後,纔得到get_booked

響應,請詢問是否有任何疑問

回答

0

這是因爲日期選擇器的整個初始化在ajax調用返回任何值之前結束。

你可以做的是啓動ajax調用,當通話結束時,調用datepicker的初始化。

例如:在你的Ajax調用:

... 
... 
$.ajax({ 
    url: BASE_URL + "contest/get_booked", 
    data: {year: year, month: month, id:<?php echo (isset($contest_data->id)) ? $contest_data->id : 0; ?>}, 
    dataType: "json",   
    type: "POST",   
    success: function(data) {   
     for (var d in data) {   
      var D = data[d];   
      var start = D.start_on;   
      var d = start.split("-");   
      var sD = new Date(d[0], d[1] - 1, d[2]);   
      var end = D.end_on;   
      var d = end.split("-");   
      var eD = new Date(d[0], d[1] - 1, d[2]);   
      while (sD <= eD) {   
       dis_date.push(sD.getFullYear() + "-" + (sD.getMonth() + 1) + "-" + sD.getDate());   
       sD.setDate(sD.getDate() + 1);   
      }   
     }   
     //CALL YOUR DatePicker Initialization 
     initDatePicker(); 
    } 

}); 
... 
... 




function initDatePicker(){ 
    $("#start_on").datepicker({/*Initialization values*/}); 
} 
+0

我也想更新當日歷月份發生變化時 –

+0

您可以做的是當您在輸入字段中單擊時,而不是顯示日曆,您可以進行ajax調用並填充全局變量。完成後,您可以使用 $(「#start_on」)。datepicker(「show」);打開Datepicker。 – user3204547

0

爲this.just使用 '假異步' 簡單解決方案。

例子:

... ... $阿賈克斯({ 網址:BASE_URL + 「大賽/ get_booked」, 數據:{年:年,月:一個月,ID:ID) )? $ contest_data-> id:0; ?>}, 數據類型: 「JSON」,
類型: 「POST」,
異步:假, 成功:功能(數據){
... ...