onclick事件无法使用javascript中的链接

时间:2013-06-27 14:46:45

标签: javascript onclick

我是新的2 javascript我创建了添加onclick事件的功能&将用户功能调用到页面中的所有链接 但它没有正常工作帮助我解决这个问题

<script type="text/javascript"> 
  window.onload=function() {  
  var links = document.getElementsByTagName('a');
  for(var i = 0, i<links.length; i++) {
  links[i].onclick = function () {  
  var string = links[i].href; //href value
  var str = string;    
  var spl = string.split("/");   
    switch(spl[2])
    {

        case 'www.google.com':
        var str1 = "http://yahoo.com";
        links[i].target="_blank";
        links[i].href= str1;

        break;

        default:
        links[i].href= string;
    }  
    }

 } 
 }

 </script> 

<a href="http://www.google.com/" target="-blank">www.google.com</a></br>

1 个答案:

答案 0 :(得分:4)

你有两个问题:

1)for循环中存在语法错误。您需要使用分号而不是逗号

for (var i = 0, i < elements.length; i++) {

VS

for (var i = 0; i < elements.length; i++) {

2)onclick回调引用i。问题是,您在循环期间正在更改i,但在循环完成后,您只能在稍后进行onclick回调 。因此i的值实际上是1。这意味着i与您点击的每个单个链接的值相同。所以,如果你有5个链接,那么i将为6(6个是你的for循环的第一个破坏值)

要记住的重要事项是稍后调用onclick,然后在此之前更新i。要解决此问题,您可以在定义onclick函数时捕获i的值,如下所示:

window.onload = function () {
    var elements = document.getElementsByTagName('a');
    for (var i = 0; i < elements.length; i++) {
        (function(index){ 
            elements[index].onclick = function () {
            var string = elements[index].href; //href value
            var str = string;
            var spl = string.split("/");
            switch (spl[2]) {

            case 'www.google.com':
                var str1 = "http://yahoo.com";
                elements[index].target = "_blank";
                elements[index].href = str1;

                break;

            default:
                elements[index].href = string;
            }
        }
        })(i);

    }
}