任何人都知道为什么这不会超过1个日期......
它只需要数组中的第一个日期......
var unavailableDates = ["10-6-2011","13-6-2011"];
function unavailable(date) {
dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
if ($.inArray(dmy, unavailableDates) == 0) {
return [false, "", "Unavailable"];
} else {
var day = date.getDay();
return [(day != 0 && day != 2 && day != 3 && day != 4 && day != 6)];
}
}
见下面的完整示例
http://offline.raileisure.com/lee.php
提前致谢
利
答案 0 :(得分:8)
它不起作用,因为您正确地解释了“$ .inArray()”的返回值。当找不到搜索目标时,该函数返回 -1 ,并且当它可以时,返回数组中的索引。因此,当它返回 0 时,这意味着它确实找到了代码所寻找的内容。
一个可爱的伎俩 - 对于喜欢可爱技巧的人来说 - 检查“$ .inArray()”等函数的返回值是应用“〜”运算符:
if (~$.inArray(needle, haystack)) {
// found it
}
else {
// did not find it
}
“〜”运算符形成其参数的按位补码(或“1的补码”)。因为“〜-1”为0,并且“~n”对于任何其他整数都不为零,所以它有效地将返回值转换为“truthy / falsy”值。如果你不喜欢可爱的技巧,请不要使用它: - )
此外,应使用var
关键字在每个函数中声明一对函数中使用的“dmy”变量。
答案 1 :(得分:3)
jQuery.inArray返回找到的项目的索引,即,当它与第二个值匹配时,它返回1,而不是您测试的0。
当您执行
时,您应该将测试更改为>= 0
而不是== 0
if ($.inArray(dmy, unavailableDates) == 0) { ...
答案 2 :(得分:1)
是否以mm-dd-yyyy的形式阅读?
如果是这样 - 那么13-6-2011
将不是有效日期。
编辑好的 - 看着你的页面;显然不是因为6月10日没有按预期提供。
我删除了答案,但是关于日期,我认为这是一件值得记住的事情(例如,在美国客户上,我认为我是对的?)所以我取消了它。
如果社区觉得我应该这样做,我会再次摆脱它。
答案 3 :(得分:0)
试试这个: 在纯JavaScript中: 我做了一些修改以使您的代码更快
function inArrayOrStr (o, v) {
return ~o.indexOf(v);
}
unavailableDates = ["10-6-2011","13-6-2011"];
function unavailable(date) {
var dmy = [date.getDate() ,(date.getMonth() + 1) , date.getFullYear()].join("-");
if (inArrayOrStr(unavailableDates, dmy) {
return [false, "", "Unavailable"];
} else {
var day = date.getDay();
return [day > 7];
}
}