我有一个带有动态html标签的登录页面。问题是,我无法直接选择标签。它是一个链接。以下代码是构造:
<div id="testid"><div><div><a href="#">Button 1</a><div><div><div>
每次有人点击链接(a-tag)时,我都想触发类似以下代码的事件:
<a href="#" name="button1" onclick="dataLayer.push({'event': 'button1-click'});">Button 1</a>
问题:将onclick="dataLayer.push({'event': 'button1-click'})
属性添加到a标记的Javascript代码是什么。
我尝试了以下代码:
var d = document.getElementById("testid").firstchild;
d.setAttribute("onclick", "dataLayer.push({'event': 'button1-click'})");
但似乎代码不正确。 a
标签也不是第一个孩子;之间有2个div :(
使用querySelector
和addEventListener
:
document.addEventListener('DOMContentLoaded', function () {
var dataLayer = [];
var d = document.querySelector("#testid a[name=button1]");
d.addEventListener("click", function () {
dataLayer.push({ 'event': 'button1-click' });
});
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>repl.it</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="testid">
<div>
<div>
<a href="#" name="button1">Button 1</a>
<div>
<div>
<div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="script.js">
</script>
</body>
</html>
您的JS中缺少一些东西。
#testid a[name=button1]
与firstchild
的#testid
,这是不准确的)。DOMContentLoaded
监听器中。依赖页面元素的JS需要等待页面首先构建,这就是DOMContentLoaded
。看看我的解决方案。希望这可以帮助。
var d = document.querySelector("#testid a");
var dataLayer = []
d.onclick = function () {
dataLayer.push({'event': 'button1-click'})
console.log(dataLayer.length)
}
<div id="testid"><div><div><a href="#">Button 1</a><div><div><div>