如何使用Javascript将事件添加到html标记

问题描述 投票:2回答:2

我有一个带有动态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 :(

javascript html events onclick dom-events
2个回答
0
投票

使用querySelectoraddEventListener

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中缺少一些东西。

  1. 使用更具体的选择器(#testid a[name=button1]firstchild#testid,这是不准确的)。
  2. 将所有代码包装在DOMContentLoaded监听器中。依赖页面元素的JS需要等待页面首先构建,这就是DOMContentLoaded

1
投票

看看我的解决方案。希望这可以帮助。

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>
© www.soinside.com 2019 - 2024. All rights reserved.