我正在使用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'); }) ;