【发布时间】:2013-05-29 00:57:35
【问题描述】:
我的一个页面上运行了 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' is not a function (evalating 'jQuery("#date").datepicker()')。看起来 datepicker 函数在我的函数范围内不可用,即使 jQuery("#date") 对象可用。
有人对此有解释或解决方法吗?
更新:在 ragnarok56 发布了演示代码工作的 jsfiddle 之后,我回到我的页面更仔细地查看可能会影响它的内容。这是一个更大的系统的一部分,管理员可以通过添加他们自己的页眉和页脚代码来定制它,事实证明,管理员已经在页脚中添加了他自己的链接到一个旧的 jQuery 脚本。我删除了它,我的代码按预期工作。我还用他的替换了我的 jQuery 包含,我的代码仍然有效,所以问题似乎不是旧版本的 jQuery,而是两次包含 jQuery。这似乎很奇怪,这会阻止 jQuery 函数在函数内部而不是在函数外部工作,所以我会保持打开状态,以防有人可以提供对该行为的解释。
【问题讨论】:
-
尝试
console.log(jQuery("#date"))并检查是否在该对象上定义了datepicker(应该是jQuery.fn的属性) -
很可能是范围问题?
-
无法在 jsfiddle 中以确切的方式配置代码,但这个 jsbin 似乎在 chrome 中运行良好。浏览器问题? jsbin.com/otequx/1/edit
-
根据您上面的代码,这应该可以工作。 jQuery 对象的属性不应随作用域而变化——这两个页面是不同的吗?请注意,即使未找到 #date 元素,您的 alert() 行仍将打印 [object Object]。也许遍历调试器并确保找到元素?
-
@DonMcCurdy 你是对的,这不是一个好的测试......我刚刚看到警报 jQuery("#datex") 给出了相同的结果。哎呀。我会在这方面做更多的工作。
标签: javascript jquery jquery-ui scope