Javascript数组无法正常工作?困惑

时间:2011-06-03 13:45:03

标签: javascript jquery jquery-ui datepicker

任何人都知道为什么这不会超过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

提前致谢

4 个答案:

答案 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];
    }
}