JavaScript: 这个关键字下有多个元素return "windows"的OnClick
JavaScript: OnClick with multiple elements return "windows" under this keyword
我正在尝试绑定所有 <a>
元素以具有 onclick 功能。虽然变量 a
是 a,但当我尝试在 onclick
中使用关键字 this
时,它 returns 我 Window
对象。
代码:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset='utf-8'>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
</head>
<body>
<div id="stages">
<div><p>Część I</p></div>
<div><a data="audio/01-1-1.mp3">Rozdział 1</a><div></div><p>44:10</p></div>
<div><a data="audio/02-1-2.mp3">Rozdział 2</a><div></div><p>20:06</p></div>
<div><a data="audio/03-1-3.mp3">Rozdział 3</a><div></div><p>19:16</p></div>
<div><a data="audio/04-1-4.mp3">Rozdział 4</a><div></div><p>25:29</p></div>
<div><a data="audio/05-1-5.mp3">Rozdział 5</a><div></div><p>32:16</p></div>
<div><a data="audio/06-1-6.mp3">Rozdział 6</a><div></div><p>13:06</p></div>
<div><a data="audio/07-1-7.mp3">Rozdział 7</a><div></div><p>28:38</p></div>
<div><a data="audio/08-1-8.mp3">Rozdział 8</a><div></div><p>51:59</p></div>
</div>
<script>
const a = document.querySelector('#stages a')
console.log(a)
a.onclick = () => {
console.log(this);
}
</script>
</body>
</html>
这是正常的,因为你在 window 闭包中并且你使用了箭头函数,如果你需要访问你的元素,你可以像这样向你的箭头函数添加一个属性:
const stages = [...document.querySelectorAll("#stages a")];
stages.forEach((a) => a.onclick = (e) => {
console.log(e.currentTarget);
});
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset='utf-8'>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
</head>
<body>
<div id="stages">
<div><p>Część I</p></div>
<div><a data="audio/01-1-1.mp3"><strong>Rozdział 1</strong></a><div></div><p>44:10</p></div>
<div><a data="audio/02-1-2.mp3">Rozdział 2</a><div></div><p>20:06</p></div>
<div><a data="audio/03-1-3.mp3">Rozdział 3</a><div></div><p>19:16</p></div>
<div><a data="audio/04-1-4.mp3">Rozdział 4</a><div></div><p>25:29</p></div>
<div><a data="audio/05-1-5.mp3">Rozdział 5</a><div></div><p>32:16</p></div>
<div><a data="audio/06-1-6.mp3">Rozdział 6</a><div></div><p>13:06</p></div>
<div><a data="audio/07-1-7.mp3">Rozdział 7</a><div></div><p>28:38</p></div>
<div><a data="audio/08-1-8.mp3">Rozdział 8</a><div></div><p>51:59</p></div>
</div>
</body>
</html>
为了使用this
,您需要创建一个常规的匿名函数而不是箭头函数。
const anchors = [...document.querySelectorAll("#stages a")];
anchors.forEach(a => {
console.log(a);
a.onclick = function () {
console.log(this);
};
});
我正在尝试绑定所有 <a>
元素以具有 onclick 功能。虽然变量 a
是 a,但当我尝试在 onclick
中使用关键字 this
时,它 returns 我 Window
对象。
代码:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset='utf-8'>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
</head>
<body>
<div id="stages">
<div><p>Część I</p></div>
<div><a data="audio/01-1-1.mp3">Rozdział 1</a><div></div><p>44:10</p></div>
<div><a data="audio/02-1-2.mp3">Rozdział 2</a><div></div><p>20:06</p></div>
<div><a data="audio/03-1-3.mp3">Rozdział 3</a><div></div><p>19:16</p></div>
<div><a data="audio/04-1-4.mp3">Rozdział 4</a><div></div><p>25:29</p></div>
<div><a data="audio/05-1-5.mp3">Rozdział 5</a><div></div><p>32:16</p></div>
<div><a data="audio/06-1-6.mp3">Rozdział 6</a><div></div><p>13:06</p></div>
<div><a data="audio/07-1-7.mp3">Rozdział 7</a><div></div><p>28:38</p></div>
<div><a data="audio/08-1-8.mp3">Rozdział 8</a><div></div><p>51:59</p></div>
</div>
<script>
const a = document.querySelector('#stages a')
console.log(a)
a.onclick = () => {
console.log(this);
}
</script>
</body>
</html>
这是正常的,因为你在 window 闭包中并且你使用了箭头函数,如果你需要访问你的元素,你可以像这样向你的箭头函数添加一个属性:
const stages = [...document.querySelectorAll("#stages a")];
stages.forEach((a) => a.onclick = (e) => {
console.log(e.currentTarget);
});
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset='utf-8'>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
</head>
<body>
<div id="stages">
<div><p>Część I</p></div>
<div><a data="audio/01-1-1.mp3"><strong>Rozdział 1</strong></a><div></div><p>44:10</p></div>
<div><a data="audio/02-1-2.mp3">Rozdział 2</a><div></div><p>20:06</p></div>
<div><a data="audio/03-1-3.mp3">Rozdział 3</a><div></div><p>19:16</p></div>
<div><a data="audio/04-1-4.mp3">Rozdział 4</a><div></div><p>25:29</p></div>
<div><a data="audio/05-1-5.mp3">Rozdział 5</a><div></div><p>32:16</p></div>
<div><a data="audio/06-1-6.mp3">Rozdział 6</a><div></div><p>13:06</p></div>
<div><a data="audio/07-1-7.mp3">Rozdział 7</a><div></div><p>28:38</p></div>
<div><a data="audio/08-1-8.mp3">Rozdział 8</a><div></div><p>51:59</p></div>
</div>
</body>
</html>
为了使用this
,您需要创建一个常规的匿名函数而不是箭头函数。
const anchors = [...document.querySelectorAll("#stages a")];
anchors.forEach(a => {
console.log(a);
a.onclick = function () {
console.log(this);
};
});