javascript – 为什么jQuery的加载事件不会触发动态插入的脚本元素?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么jQuery的加载事件不会触发动态插入的脚本元素?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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!');
});

如果我使用常规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!');
});

我究竟做错了什么?

解决方法

请改用 jQuery.getScript()[docs]方法.
$.getScript('http://platform.twitter.com/widgets.js',function(){
    alert('I just loaded!');
});

或者,在当前版本的jQuery上,使用promise模式如下所示

$.getScript('http://platform.twitter.com/widgets.js')
  .done(function(){
    alert('I just loaded!');
  })
  .fail(function(){
    console.log('script could not load');
  })
;

编辑:删除了从问题中复制的代码注释,因为它增加了答案的混乱.感谢@Jeff指出.

猜你在找的jQuery相关文章