2011-07-08 220 views
1

我在我的項目中使用jquery datepicker。我正在使用ajax訪問數據庫以檢索每月變化需要突出顯示的日期。這是使用onChangeMonthYear:函數(year,month,inst)和beforeShowDay:function(dateToShow)事件完成的。日期正在被恰當地突出顯示,但是我遇到的問題是,需要很長時間才能突出顯示beforeshowday事件中的日期。我想在此指出,本地計算機上的訪問時間非常快,消除了服務器的響應時間導致突出顯示延遲的事實。DatePicker顯示速度很慢

我也嘗試過使用持續時間:'快',但這也沒有幫助。

1.How我可以增加日期的顯示時間?或

2.how可我無法日曆,這樣直到被顯示的日期,用戶不能老是通過其他月份導航。

+2

把一些時序上的代碼,找出瓶頸,然後將您的問題發佈您的代碼。 – DarthJDG

+0

有沒有辦法可以禁用datepicker或atleast月份選擇器,直到showtime hasn't完成? – learning

+0

嗨user281180 ..你檢查了我的答案嗎?我相信它應該工作。 –

回答

1

你應該能夠禁用/啓用日期選擇器通過使用其disable選項:

$('.selector').datepicker({ 
    onChangeMonthYear: function(year, month, inst) { 
     $(this).datepicker("option", "disabled", true); 
    }, 

    beforeShowDay: function(date) { 
     $(this).datepicker("option", "disabled", false); 
    } 
}); 
1

林想質疑你的這種方法,但由於我們沒有所有的事實,我可能是錯的。但是,從我們得到:

方法1.將所有的日期服務器端沒有任何AJAX,因爲它能夠更好地裝載多一點的數據只有一次話少了很多次。

方法2,如果1是不可能的負載都與阿賈克斯的日期,然後激活Ajax回調的日期選擇器。

方法3.如果有一個巨大的日期,你可以批它,至少確保你有幾個月的提前量。

1

有點難無碼,但給出如下嘗試:

在CSS文件:#calendarContainer {display:none;}

$(function(){$('#calendarContainer').show();}); 
//Will only show when document is ready. 

或日期延遲情況發生,即使頁面已加載:

在CSS文件:#calendarContainer {display:none;}

$(function(){ 

var sI = setInterval(function() { 
    if ($('.dateHighlightContainer .dates').hasClass('highlight')) 
    { 
     $('#calendarContainer').show(); 
     clearInterval(sI); 
    } 
}, 1000); 
    }); 
//Check each second - Will stop and display calendar once it finds the class highlight 

Check我的更詳細完整的例子:http://jsfiddle.net/Jeu5q/

1

你的延遲問題必須用你的Ajax方法有關。 這裏是工作example。我沒有注意到預定義日期的任何延遲問題。

// Highlighted Days 
var dayList = [1, 3, 5, 7, 9, 11 , 13 , 15 , 17 , 19 , 21 , 23 , 25 , 27 ]; 
var monthList = ["Jan", "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov","Dec" ]; 

function createDays(dayList, month, year) { 

    var dateArray = new Array(); 
    $.each(dayList, function(i, value) { 
     dateArray.push(new Date(month.concat(' ', value, ', ', year))); 
    }); 
    return dateArray; 
} 

$(document).ready(function() { 

    $dateArray = createDays(dayList, "Jul", "2011"); 

    $('#datepicker').datepicker({ 
     beforeShowDay: function(_date) { 

      $highLightDay = false;    
      $.each($dateArray , function(i, date) { 
       if (date.valueOf() == _date.valueOf()) {     
        $highLightDay = true; 
       }     
      }); 

      if($highLightDay) 
       return [true, "ui-state-active" ,"Event-".concat(_date)]; 

      return [true, "", ""]; 
     }, 
     onChangeMonthYear: function(year, month, inst) { 
      $dateArray = createDays(dayList, monthList[month-1], year);  

     } 

    }); 

}); 
+0

「Luffy,非常感謝,事實上問題在於Ajax請求,它在服務器端需要更多的時間,感謝所有那些試圖幫助我的人,所有的例子和解釋都非常有幫助。 – learning