0

尝试简单地识别是否有任何标签在任何时候被点击并获得单击标签的href属性以存储在数据库中。试图获得<a>标签的href属性onclick - 没有错误?

为了测试我试图打印出href,但是没有任何内容在屏幕上显示,并且在控制台中没有错误?有任何想法吗?

// Anchor Tags - Capture the href of the link clicked 
var aTags = document.getElementsByTagName('a'); 

for (var i = aTags.length - 1; i >= 0; --i) { 
    aTags[i].onclick = function() { 
    var aTagHref = aTags[i].getAttribute("href"); 
     alert(aTagHref); 
    }; 
} 
+0

使用 '这个' 或event.target。你试图做到这一点的方式不起作用,因为你不通过闭包来缓存'i'。因此,当循环结束时,我将是aTags.length + 1,因此所有点击都将尝试在aTags中找到一个不存在的元素。总是尝试在事件处理程序中使用event.target,因为它会告诉您事件来自哪个元素,而无需将其缓存到数组中。 – Shilly

回答

2

里面一个事件监听器,你不会有元素的数组,并且还可以使用this引用点击a

像这样:

var aTags = document.getElementsByTagName('a'); 
 

 
for (var i = aTags.length - 1; i >= 0; --i) { 
 
    aTags[i].onclick = function() { 
 
    var aTagHref = this.getAttribute("href"); 
 
     alert(aTagHref); 
 
    }; 
 
}
<a href="#asd">a</a> 
 
<br /> 
 
<a href="#asdf">b</a> 
 
<br /> 
 
<a href="#asdfg">c</a>

+0

它的工作原理!快速问题,for循环背后的逻辑是什么var i = aTags.length - 1; ?我们是不是通过从长度减1来跳过初始索引,而不是像i = 4,3,2,1那样进行迭代,我们正在像:3,2,1 ...正确? – Shaz

+1

@Shaz,这种情况下的生命线是 - > create'var i = 3 - 1';检查条件;做逻辑;递减;检查条件....所以,'i'的值就像2,1和0 – Lucas

+0

这就是我的观点。它不会执行'3'上的逻辑。开始。如果var i中有3个链接,是不是只是在2,1 0和NOT 3nth上执行逻辑? – Shaz

相关问题