2013-06-27 2 views
1

Я новый 2 Javascript я создал функцию, которая добавляет OnClick событие & вызывает пользовательскую функцию для всех моих ссылок на странице , но это не работает должным образом помочь мне решить этуOnClick событие не работает со ссылками на JavaScript

<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

Что вы имеете в виду Есть ли ошибка? Он ничего не делает? – thegrinner

+0

вы используете 'elements [i]' в функции onclick, которая всегда будет последним элементом, поскольку цикл for будет завершен при вызове функции onclick. это ваша ошибка? – x4rf41

+0

нет ошибки, это значение по умолчанию href не значение функции href – user2520639

ответ

4

у вас есть 2 проблемы:

1) Вы синтаксическую ошибку в ваш цикл. Вы должны использовать точку с запятой вместо запятых

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 ссылок, i будет 6 для всех из них (6 - первое значение прерывания для вашего цикла)

Важно помнить, что 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); 

    } 
} 
+1

У вас все еще есть синтаксическая ошибка запятой в цикле for xD –

+0

@Zeaklous lol, совершенно верно, спасибо! – Matt