如何使用for循环遍历函数?

时间:2014-12-27 16:08:07

标签: javascript html ajax

我想通过' 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>

1 个答案:

答案 0 :(得分:1)

如果问题,你会有很多。

    在for循环中,你没有使用y初始化var,这可能会导致问题,因为现在y是全局范围的一部分。 在for循环中,你有y <= numberOkays,这将导致在结尾检索空元素,因为numberOkays是数组长度的结果。所以你会好起来的[y]在最后是不确定的。
  • 您不需要在开始时检索确定,您可以在onclick事件中获取相应的元素。
  • 循环完成后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();
    };
}

jsFiddle