代码中没有抛出任何错误,所以我只能假设事件没有被触发或者它们没有被正确添加。任何人都可以确定问题在这里吗?代码如下。 Fiddle here
$('#fake-body').append('init<br />');
var scriptTag,
scriptsLoaded = 0,
scripts = ['//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js', '//codeorigin.jquery.com/ui/1.9.2/jquery-ui.min.js'],
scriptLoadedCallback = function(val) {
scriptsLoaded++;
$('#fake-body').append('callback called for '+val+' | scriptsloaded = '+scriptsloaded+' & length = '+scripts.length+'<br />');
if(scriptsLoaded === scripts.length) {
$('#fake-body').append('all loaded');
}
};
$.each(scripts, function(index, value) {
$('#fake-body').append('preparing '+value+'<br />');
scriptTag = document.createElement('script');
scriptTag.type = 'text/javascript';
scriptTag.src = value;
if(typeof scriptTag.addEventListener !== 'undefined') {
$('#fake-body').append('add event for good browsers<br />');
scriptTag.addEventListener('load', (function() {
scriptLoadedCallback(value);
}), false);
} else {
$('#fake-body').append('add event for the other one<br />');
scriptTag.attachEvent('onreadystatechange', function() {
if(scriptTag.readyState === 'loaded') {
scriptLoadedCallback(value);
}
});
}
$('#fake-body').append('appending script<br />');
$('#fake-body').append(scriptTag);
});
$('#fake-body').append('complete');
答案 0 :(得分:2)
使用普通的Javascript加载javascript文件而不是jquery(因为jquery不会在当前代码中触发加载回调),所以替换:
$('#fake-body').append(scriptTag);
使用:
$('#fake-body')[0].appendChild(scriptTag);
或者如果您坚持使用jquery,则必须遵守以下语句顺序(或使用getScript):
$body.append(scriptTag);
scriptTag.attachEvent
scriptTag.src = scriptUrl;
通过在回调中引用scriptsloaded
而不是scriptsLoaded
,您有另一个错误。