我试图从带有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>
提前致谢。
答案 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()
,就可以了。