我是新的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>
答案 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);
}
}