Javascript jQuery UI函数在另一个函数中未定义
我的一个页面上运行了jQueryUI的datepicker函数。将其剥离,其工作原理如下:Javascript jQuery UI函数在另一个函数中未定义,javascript,jquery,jquery-ui,scope,Javascript,Jquery,Jquery Ui,Scope,我的一个页面上运行了jQueryUI的datepicker函数。将其剥离,其工作原理如下: <form> <input type="text" name="date" id="date" /> </form> <script type="text/javascript"> jQuery("#date").datepicker(); </script> <form> <input type="t
<form>
<input type="text" name="date" id="date" />
</form>
<script type="text/javascript">
jQuery("#date").datepicker();
</script>
<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>
jQuery(“#date”).datepicker();
由于这部分工作正常,我知道jQuery和jQueryUI脚本包含正确,等等
现在,我想从我的一个函数中激活日期选择器,如下所示:
<form>
<input type="text" name="date" id="date" />
</form>
<script type="text/javascript">
jQuery("#date").datepicker();
</script>
<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>
功能测试(){
alert(jQuery(“#date”);//这按预期工作
jQuery(“#date”).datepicker();//这会引发一个错误
}
但是当datepicker函数在我的函数中运行时,JavaScript抛出错误TypeError:“undefined”不是函数(计算“jQuery(#date”).datepicker()。看起来datepicker函数在my函数的范围内不可用,即使jQuery(“日期”)对象可用
有人对此有解释或解决方法吗
更新:在ragnarok56发布JSFIDLE演示代码工作后,我回到我的页面,更仔细地查看可能影响它的因素。这是一个更大系统的一部分,管理员可以通过添加自己的页眉和页脚代码进行自定义,结果是管理员在页脚中添加了自己到旧jQuery脚本的链接。我删除了它,我的代码按预期工作。我还用他的代码替换了我的jQuery include,我的代码仍然有效,所以问题似乎不是jQuery的旧版本,而是两次包含jQuery。奇怪的是,这会阻止jQuery函数在函数内部工作,而不是在函数外部工作,因此我将保留此选项,以防有人能够解释该行为。根据您的更新,问题是jQuery包含在jQuery UI之后 当jQueryUI初始化时,它基本上会将自己构建到现有的jQuery代码中。如果在此之后包含另一个版本的jQuery,那么原始jQuery(附带jQuery UI!)将被丢弃。这就是为什么特定于UI的方法(如datepicker)会抛出错误 最好只包含一次jQuery,但在第二个jQuery实例之后再次包含jQuery UI可能会正常工作
编辑:它在函数外部工作的原因很可能是,它在jQuery的第二个副本覆盖第一个副本之前在那里运行。该函数稍后运行,可能是?尝试
console.log(jQuery(#date”)
,然后检查是否在该对象上定义了datepicker
(应该是jQuery.fn
),很可能是范围问题?无法在JSFIDLE中准确配置代码,但这个jsbin在chrome中似乎工作正常。浏览器问题?基于上面的代码,这应该是可行的。jQuery对象的属性不应该随作用域的不同而变化——这两个页面是不同的吗?请注意,即使找不到#date元素,您的alert()行仍将打印[object]。也许通过调试器检查并确保找到元素?@DonMcCurdy你是对的,这不是一个好的测试。。。我刚刚看到警告jQuery(“#datex”)会给出相同的结果。哎呀。我会在这方面做更多的工作。这完全有道理。你对它为什么在函数之外工作的解释也是正确的。我认为这是一个范围问题,但那是一个转移视线的问题。我想我会把我自己的jQuery链接移到页面的末尾,如果它们还不存在,我会有条件地包含它们,以解决管理员添加自己副本的问题。