我正在使用jQuery动态插入一个脚本元素.脚本按预期加载,但不会触发load事件.
jQuery('<script/>').attr({
type : 'text/javascript',
src : 'http://platform.twitter.com/widgets.js'
}).appendTo('body').load(function(){
/* This alert does not fire: */
alert('I just loaded!');
});
Run Code Online (Sandbox Code Playgroud)
如果我使用常规JavaScript来插入元素,则load事件会触发并可以使用jQuery捕获.
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = 'http://platform.twitter.com/widgets.js';
document.body.appendChild(e);
jQuery(e).load(function(){
/* This alert does fire: */
alert('I just loaded!');
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
use*_*716 12
请改用jQuery.getScript()
[docs]方法.
$.getScript('http://platform.twitter.com/widgets.js',function(){
alert('I just loaded!');
});
Run Code Online (Sandbox Code Playgroud)
或者,在当前版本的jQuery上,使用promise模式如下所示
$.getScript('http://platform.twitter.com/widgets.js')
.done(function(){
alert('I just loaded!');
})
.fail(function(){
console.log('script could not load');
})
;
Run Code Online (Sandbox Code Playgroud)
编辑:删除了从问题中复制的代码注释,因为它增加了答案的混淆.感谢@Jeff指出它.