Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery UI函数在另一个函数中未定义_Javascript_Jquery_Jquery Ui_Scope - Fatal编程技术网

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

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

我的一个页面上运行了jQueryUI的datepicker函数。将其剥离,其工作原理如下:

<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链接移到页面的末尾,如果它们还不存在,我会有条件地包含它们,以解决管理员添加自己副本的问题。