从标签中获取值时,jQuery typeerror对象不是函数

时间:2013-04-29 21:31:37

标签: jquery function object typeerror

我试图从带有id的标签中获取值。 我有jQuery的经验,但无法弄清楚为什么我一直在脚本的第一行得到“未捕获的TypeError:对象不是函数”错误。

有什么想法吗?

<!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8' />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
    <div>
        <label id="test">Value</label>
    </div>
    <script>
        jQuery(window).load(function ($) {
            var label = $('#test');
            var prev = label.text();
        });
    </script>
</body>
</html>

提前致谢。

2 个答案:

答案 0 :(得分:2)

.load回调收到的第一个参数是一个事件对象:

jQuery(window).load(function ($) {
//                            ^ receives a jQuery event object

您可能会将DOM Ready handler与收到jQuery作为第一个参数混淆:

//both of these would have $ as an alias for jQuery:
jQuery(document).ready(function($){});
jQuery(function($){});

回到这个问题,有三种方法可以解决它。

首先,如果$位于全局范围内,您可以通过从$回调中删除/重命名.load参数来轻松解决问题,shadowing全球$

否则,如果jQuery处于noConflict模式,您可以使用IIFE包装器手动别名$

(function($) { //aliases jQuery to $ inside this scope
    $(window).load(function() {
        //$ references jQuery in inner scopes too as long as you don't shadow it
        var label = $('#test');
        var prev = label.text();
    });
}(jQuery));

作为第三种选择,如果您不需要等待window的{​​{1}}事件,只需使用DOM Ready处理程序。 load处理程序更早触发(一旦DOM结构准备就绪),而ready的{​​{1}}必须等待所有资源首先加载(包括图像)。

大部分时间window已足够,并且在与页面交互之前,用户不会等到最后一张图片已加载。现在,如果你正在使用图像的尺寸或类似的东西,.load可能会更有趣。试验看看。

答案 1 :(得分:0)

无需将$作为参数传递给您的函数。这样做会创建一个局部变量“$”,它将“隐藏”外部作用域中的jQuery对象。

因此$将扮演一个事件的角色(本地$)并且不再是一个函数(外部$),因此您的错误。

只要在没有参数的情况下拨打function(),就可以了。