2012-04-05 96 views
0

更新我的代码以反映我将两个语句合并的尝试。为语句添加第二个函数

function unavailableDays(date) { 
//date array to be disabled 
var disabledDays = ["1963-3-31", "1965-9-18", "1965-9-19", 
"1965-10-2", "1965-10-3", "1965-10-9", "1965-10-10"]; 

var yy = date.getFullYear(), mm = date.getMonth(), dd = date.getDate(); 
for (i = 0; i < disabledDays.length; i++) { 
if($.inArray(yy + '-' + (mm+1) + '-' + dd,disabledDays) != -1 || new Date() < date) { 
return [false]; 
} 
} 
return [true]; 

//date range to be disabled 
var first = new Date("1978-8-10"); 
var last = new Date("1978-11-05"); 
var unavailableRange = []; 

var yy = date.getFullYear(), mm = date.getMonth(), dd = date.getDate(); 
for(j = first; j < last; j.setDate(j.getDate() + 7)){ 
if($.inArray(yy + '-' + (mm+1) + '-' + dd,unavailableRange) != -1 || new Date() < date) { 
return [false]; 
} 
} 
return [true]; 
} 

我试图用日期范围初始变量纳入unavailableDays功能下面,这样我可以在日期选择器中beforeShowDay用它来禁用日期。我试过创建一个单独的函数,但这对beforeShowDate不起作用,所以我认为它需要在里面。

var first = new Date("1978-08-10"); 
var last = new Date("1978-11-05"); 
var dates = []; 

for (var i = first; i < last; i.setDate(i.getDate() + 7)) 
dates.push(new Date); 


var disabledDays = ["1963-2-17", "1963-2-24", "1963-3-3", "1963-3-10", "1963-3-17", "1963-3-24", "1963-3-31", "1965-9-18", "1965-9-19", "1965-10-2", "1965-10-3", "1965-10-9", "1965-10-10"]; 

function unavailableDays(date) { 
    var yy = date.getFullYear(), 
     mm = date.getMonth(), 
     dd = date.getDate(); 
    for (i = 0; i < disabledDays.length; i++) { 
     if ($.inArray(yy + '-' + (mm + 1) + '-' + dd, disabledDays) != -1 || new Date() < date) { 
      return [false]; 
     } 
    } 
    return [true]; 
} 

$(document).ready(function() { 
    $('.selector').datepicker({ 
     inline: true, 
     dateFormat: 'yy-mm-dd', 
     constrainInput: true, 
     changeYear: true, 
     changeMonth: true, 
     gotoCurrent: true, 
     minDate: new Date(1962, 1 - 1, 1), 
     //months are index-based(1-1) 
     maxDate: new Date(2011, 10 - 1, 24), 
     yearRange: '-60y', 
     beforeShowDay: unavailableDays, 
     onSelect: function (dateText, inst) { 
      $("#img").attr("src", "http://www.example.com" + dateText + ".jpg"); 

      var chosenDates = $.datepicker.parseDate('yy-mm-dd', dateText); 
      var backToString = $.datepicker.formatDate('MM dd' + ',' + ' yy', chosenDates); 
      $('.info').html('You are viewing:' + '<br />' + backToString); 
     } 
    }); 
+0

当评估为布尔值时,'[false]'和'[true]'总是'true'。你在那里返回数组。 – Pointy 2012-04-05 21:05:05

回答

0

你应该把unavailableDays函数的返回到一个变量并测试值让行动继续进行之前,所以程序必须等待功能,在移动之前完成。

onSelect: function (dateText, inst) { 
var blackouts = unavailableDays(date); 
    if(blackouts==true){ 
     $("#img").attr("src", "http://www.example.com" + dateText + ".jpg"); 

     var chosenDates = $.datepicker.parseDate('yy-mm-dd', dateText); 
     var backToString = $.datepicker.formatDate('MM dd' + ',' + ' yy', chosenDates); 
     $('.info').html('You are viewing:' + '<br />' + backToString); 
    } 
} 
+0

我刚才试过,它使datepicker不可点击。我尝试了相反的布尔值,它也没有工作。仍在努力尝试获取包含在禁用日期中的范围。有任何想法吗? – amespower 2012-04-05 21:20:46

+0

你是否已经单独尝试了unavailableDays函数,并且给它一个日期以确保它在将它纳入datepicker的东西之前首先给你你想要的东西? – rncrtr 2012-04-05 21:33:15

+0

yes unavailableDays函数正在工作并很好地禁用datepicker中的数组。现在我想添加1978年的范围做同样的.thx – amespower 2012-04-05 21:42:18