我想知道是否可以阻止一个函数甚至定义自己(基本上我没有使用它,但它仍然定义自己,至少我认为问题是这样的)。
if (document.getElementById("loginLogoutButton").title!="התנתק/י") {
document.getElementById("username").value="asdf";
document.getElementById("password").value="asdf";
var target = document.getElementById("loginLogoutButton");
var clickevent = document.createEvent("MouseEvents");
clickevent.initEvent("click", true, true);
target.dispatchEvent(clickevent);
}
function loaded() {
var targLpink = document.getElementById ("iconImage_3");
var clickEvent = document.createEvent ("MouseEvents");
clickEvent.initEvent('dblclick', false, true);
targLpink.dispatchEvent(clickEvent);
}
window.addEventListener("load", setTimeout(loaded,3000));
var msgodd;
var msgeven;
var messages;
//The first error happens here as far as I can tell
//"Uncaught TypeError: undefined is not a function"
function list() {
msgeven = document.getElementsByTagName("even unread");
msgodd= document.getElementsByTagName("odd unread");
var k = msgodd.length+msgeven.length;
confirm(k);
var i = 0;
while ((i+2)< k) {
if (i%2==0 && i+2<msgeven.length){
messages.push(msgeven[i/2].id);
}
if(i%2==1 && i+2<msgodd.length){
messages.push(msgodd[(i-1)/2].id);
}
i=i+1;
}
alert(messages.length);
}
setTimeout(list, 9000);
然后我在标记名上收到错误:
Uncaught TypeError: Cannot read property 'length' of undefined
我也可能会抛出,因为我正在等待页面加载,所以我必须使用 setTimeout (这不是一个不同的地址,它会在自身内部打开一些东西,所以我不能在上面使用 onload - 在至少当我尝试失败时)。
最佳答案
您将 msgeven
/msgodd
视为数组。但这是NodeList !您可以这样转换它们:
msgeven = Array.prototype.slice.call(document.getElementsByClassName("even unread"));
msgodd = Array.prototype.slice.call(document.getElementsByClassName("odd unread"));
关于javascript - 强制部分代码等待其他代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982768/