gpt4 book ai didi

javascript - 如何将多个 "onclick events"(对于HTML按钮)分配给1个函数,而不触发所有语句

转载 作者:行者123 更新时间:2023-12-01 01:22:33 24 4
gpt4 key购买 nike

我一直在尝试为多个 HTML

元素分配 onclick 事件。我试图通过仅使用 1 个函数来编写尽可能少的代码。我知道一种简单的方法,即向 HTML 元素添加事件属性,如下所示:

<body>

<p id="demo1" onclick="myFunc(this)">Paragraph 1</p>
<p id="demo2" onclick="myFunc(this)">Paragraph 2</p>

<script>
function myFunc(para) {
para.style.color = "red";
}
</script>

但是如果我要向多个 HTML 元素添加许多事件属性,那么 Html 文档就会变得一团糟,对吧?所以我宁愿用 JavaScript 编写代码。但问题是,当我在 Js 中分配代码并单击其中一个

标签时,它们都会被触发(顺便说一句,我对 Js 编码非常陌生,所以这可能是我的愚蠢)

<body>
<p id="demo1">Paragraph 1</p>
<p id="demo2">Paragraph 2</p>
<script>
var x = document.getElementById("demo1").onclick = myFunc;
var y = document.getElementById("demo2").onclick = myFunc;

function myFunc() {
if (x == document.getElementById("demo1").onclick) {
document.getElementById("demo1").style.color = "red";
}
if (y == document.getElementById("demo2").onclick) {
document.getElementById("demo2").style.color = "red";
}
}
</script>

最佳答案

考虑使用事件委托(delegate) - 将监听器分配给要监听事件的元素的容器,然后检查 event.target(单击的触发事件的元素)以查看它是否是您希望监听器运行的元素:

document.body.addEventListener('click', ({ target }) => {
// Only continue on `<p>` elements:
if (!target.matches('p')) {
return;
}
target.style.color = 'red';
});
<p id="demo1">Paragraph 1</p>
<p id="demo2">Paragraph 2</p>
<div>some other element that will not change on click</div>

如果您要为每个单独的元素添加监听器,请在监听器内检查 this 以引用被单击的元素,然后您可以根据需要分配其样式:

document.getElementById("demo1").onclick = myFunc;
document.getElementById("demo2").onclick = myFunc;

function myFunc() {
this.style.color = 'red';
}
<p id="demo1">Paragraph 1</p>
<p id="demo2">Paragraph 2</p>

(您还可以使用 myFunc 中的参数来获取 event,并从中获取 event.target,就像第一种方法)

关于javascript - 如何将多个 "onclick events"(对于HTML按钮)分配给1个函数,而不触发所有语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com