【问题标题】:jQuery UI functions are undefined inside another functionjQuery UI 函数在另一个函数中未定义
【发布时间】: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


【解决方案1】:

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

当 jQuery UI 初始化时,它本质上是将自身构建到现有的 jQuery 代码中。如果在此之后包含另一个版本的 jQuery,原始的 jQuery(附带 jQuery UI!)将被丢弃。这就是为什么特定于 UI 的方法(如 datepicker)会抛出错误的原因。

只包含一次 jQuery 肯定更好,但在第二个 jQuery 实例之后包含 jQuery UI 再次将(可能)正常工作。

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

【讨论】:

  • 这完全有道理。你对它为什么在函数之外工作的解释也是正确的。我认为这是一个范围界定问题,但这是一个转移注意力的问题。我想我会将自己的 jQuery 链接移到页面末尾,如果它们不存在,则有条件地包含它们,以解决管理员添加自己的副本的问题。
猜你喜欢
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多