为什么(function($){$ .widget()})(jQuery)失败但$(function(){$ widget()});才不是

时间:2016-10-24 13:43:06

标签: javascript jquery

我正在尝试将应用程序从jQuery 1.12.4升级到3.1.1我有几个以特定方式失败的脚本,但我不明白其中的原因。这就是我所看到的。

代码如下所示:

(function( $ ) {
$.widget("ui.voicerecorder", 
{  
...
});

})( jQuery );

抛出错误:对象不支持属性或方法'小部件'

但是,如果我将其更改为:

$(function() {
$.widget("ui.voicerecorder", 
{  
...
});

});

错误消失了,但是稍后在jQuery中我再次得到同样的错误:对象不支持属性或方法'小部件'。我不确定在哪里看,或者为什么改变小部件的定义会产生影响。

jQuery 3.1.1中的错误发生在第3855行。

修改 以下是标题中脚本标记的顺序:

<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/jquery-3.1.1.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/jquery-migrate-3.0.0.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/require-2.3.2.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/ui/jquery-ui-1.12.1.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/jquery.misc.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/ui/jquery.menuopts.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/ui/jquery.inbox.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/ui/jquery.themechanger.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/ui/jquery.voicerecorder.js?v=5.15b"></script>
<script language="JavaScript" type="text/javascript" src="rui/scripts/jquery/ui/jquery.keypad.js?v=5.15b"></script>

导致此错误的部分是小部件:jquery.menuopts.js,收件箱,主题转换器,语音记录器,键盘。如您所见,它们都在jquery_ui之后加载小部件代码。如果我改回jquery 1.12和jquery-ui 1.8,所有内容都会使用第一种语法正确加载。这可能是一个时间问题吗?我使用的是IE 11.0。

1 个答案:

答案 0 :(得分:0)

在第一个示例中,小部件可能尚未加载。代码立即在一个立即执行的函数中运行。

但是在第二个示例中,您使用了文档就绪处理程序,因此稍后会运行。

$(function() {//...