我正在尝试确定是否已加载Twitter Bootstrap“tab.js”。一种方法是查看它挂钩的事件。
如果我将事件处理程序转储到控制台:
namespace:"bs.data-api.tab"
Chrome的控制台显示:
正如您所看到的,Click Array [7]变成了一个Array [5],但是显示了7个对象,然后当我尝试显示元素[5]的命名空间时,元素[5]和[6]已经消失!
任何人都知道这里发生了什么,以及如何阅读元素[5]的值,是
SendIntentException
由于 JC
答案 0 :(得分:0)
这是一个时间问题。我正在加载'tab.js',将其附加到正文,并假设此过程将立即完成:
ourScript = document.createElement("script");
ourScript.type = "text/javascript";
ourScript.src = sourceDir + "tab.js";
document.body.appendChild(ourScript);
似乎没有来自jquery追加的回调,所以我在检查'tab.js'之前添加了一秒延迟,所有看起来都没问题。我希望Chrome控制台会混淆并显示出奇怪的效果。
最终代码:
// ---------------------------------
var eventNameSpaceLoaded = function (thisNamespace) {
var isLoaded = false;
var theseClickEvents = jQuery._data(document, "events").click;
Object.keys(theseClickEvents).forEach(function (key) {
if (theseClickEvents[key].namespace && (theseClickEvents[key].namespace === thisNamespace)) {
isLoaded = true;
return false; // stop the each
}
});
return isLoaded;
};
// check bootstrap tab.js is loaded
var ourScript;
if( !eventNameSpaceLoaded("bs.data-api.tab")) {
ourScript = document.createElement("script");
ourScript.type = "text/javascript";
ourScript.src = sourceDir + "tab.js";
document.body.appendChild(ourScript);
}
// has tab.js been loaded - try checking for 10 seconds
(function checkTabLoad( counter) {
if( !eventNameSpaceLoaded("bs.data-api.tab")) {
counter -= 1;
if(counter > 0){
setTimeout(function(){
checkTabLoad( counter);
}, 100);
}
} else {
// get tabs working
$('#SOME_ SELECTOR').click(function (e) {
e.preventDefault();
$(this).tab('show');
});
console.log("tabs fired up");
}
}( 100));