我想通过' y'变量到okayid但循环似乎有问题。第一次调用' y'循环工作正常。在okay.item(y)上,但它没有循环通过okayid.item(y)。在我看来,这是一个范围问题,但我不确定。
var okay = document.getElementsByClassName("Okay");
var okayid = document.getElementsByClassName("OkayID");
var numberOkays = okay.length;
for(y = 0; y <= numberOkays; y++){
okay.item(y).onclick = function(){
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
alert('vote Sent to picture with id = ' + okayid.item(y).innerHTML);
}
};
xmlhttp.open("GET", "ajax/vote.php", true);
xmlhttp.send();
};
}
这是html ...
<a class="Link1A Okay" href="#"><span class="OkayID">[id]</span><div class="Vote1A">Okay</div></a>
答案 0 :(得分:1)
如果问题,你会有很多。
y
初始化var
,这可能会导致问题,因为现在y
是全局范围的一部分。
在for循环中,你有y <= numberOkays
,这将导致在结尾检索空元素,因为numberOkays是数组长度的结果。所以你会好起来的[y]在最后是不确定的。
y
将位于最后一个索引处,因此当点击事件被触发时,当您引用Okay[y]
(或在您的情况下)时,您总是会得到最后一个元素你会因为问题而得到不确定2)。使用此选项将引用单击的元素,该元素实际上与Okay[y]
。以下是您的代码的更新版本,其中包含指向以下工作jsFiddle的链接:
var okay = document.getElementsByClassName("Okay");
for(var y = 0; y < okay.length; y++){
okay[y].onclick = function(){
idElem = this.getElementsByClassName("OkayID")[0];
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
alert('vote Sent to picture with id = ' + idElem.innerHTML);
}
};
xmlhttp.open("GET", "ajax/vote.php", true);
xmlhttp.send();
};
}