jQuery UI函数在另一个函数中未定义

时间:2013-05-29 00:57:36

标签: javascript jquery jquery-ui scope

我在其中一个页面上运行了jQuery UI的datepicker函数。剥离它,它的工作原理如下:

<form>
    <input type="text" name="date" id="date" />
</form>
<script type="text/javascript">
    jQuery("#date").datepicker();
</script>

由于这部​​分有效,我知道正确包含了jQuery和jQuery UI脚本等。

现在,我想从我的一个函数中激活日期选择器,如下所示:

<form>
    <input type="text" name="date" id="date" />
</form>
<a href="JavaScript:test();">test</a>
<script type="text/javascript">
    function test() {
        alert(jQuery("#date")); // this works as expected
        jQuery("#date").datepicker(); // this throws an error
    }
</script>

但是当datepicker函数在我的函数内部运行时,JavaScript会抛出错误 TypeError:'undefined'不是函数(评估'jQuery(“#date”)。datepicker()')。看起来datepicker函数在我的函数范围内不可用,即使jQuery(“#date”)对象可用。

有没有人对此有解释或解决方法?

更新:在ragnarok56发布jsfiddle演示代码工作后,我回到我的页面,仔细查看可能影响它的内容。这是管理员可以通过添加自己的页眉和页脚代码来自定义的更大系统的一部分,结果是管理员已经在页脚中添加了自己的链接到旧的jQuery脚本。我删除了它,我的代码按预期工作。我也替换了我的jQuery包含他和我的代码仍然有效,所以看起来问题不是旧版本的jQuery,而是包括jQuery两次。这似乎很奇怪,这会阻止jQuery函数在函数内部工作,但不能在函数外部工作,所以如果有人可以提供对该行为的解释,我将保持开放状态。

1 个答案:

答案 0 :(得分:1)

根据您的更新,问题是在jQuery UI之后包含了jQuery。

当jQuery UI初始化时,它基本上将自己构建到现有的jQuery代码中。如果你之后包含另一个版本的jQuery,原始的jQuery(附带jQuery UI!)将被抛弃。这就是像datepicker这样的特定于UI的方法抛出错误的原因。

绝对最好只包含一次jQuery,但在第二个jQuery实例(可能)正常工作之后再次包含jQuery UI

编辑:它在函数外部工作的原因很可能是它在第二个jQuery副本覆盖第一个之前运行。该函数可能稍后运行?