1

我是新的 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>
4

1 回答 1

4

你有2个问题:

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

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

对比

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

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

这里要记住的重要一点是 onclick 稍后调用,并且您在i此之前进行更新。为了解决这个问题,您可以i在定义 onclick 函数时捕获 的值,如下所示:

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);

    }
}
于 2013-06-27T14:57:02.287 回答