gpt4 book ai didi

javascript - 如何向同一个事件添加多个事件处理程序?

转载 作者:行者123 更新时间:2023-12-03 00:02:36 25 4
gpt4 key购买 nike

我是 JavaScript 新手,我正在尝试从两个不同的函数将 2 个事件处理程序注册到同一事件,但无论我尝试什么,一个事件处理程序都会覆盖另一个。有什么方法可以从不同的函数注册多个事件处理程序吗?

在下面的代码中,我尝试通过按两个按钮来注册两个事件处理程序,但处理程序会相互覆盖。

<p id="text">text</p>

<p id="text1">text1</p>

<button id="myBtn">text</button>

<button id="myBtn1">text1</button>

<script>
document.getElementById("myBtn").addEventListener("click", foo);

document.getElementById("myBtn1").addEventListener("click", bar);

function foo() {
var target = document.getElementById("text");

document.body.onkeypress = function(e){
animateElem(target);
}
}

function bar() {
var target = document.getElementById("text1");

document.body.onkeypress = function(e){
animateElem(target);
}
}

function animateElem(elemFound){
var start = 0.3;
var increment = 0.3;

var id = setInterval(allOpacity, 100);

function allOpacity() {
if (start > 3) {
clearInterval(id);
elemFound.style.opacity = 0.5;
}
else {
start = start + increment;
elemFound.style.opacity = start % 1;
}
}
}

</script>

最佳答案

您应该使用addEventListener()而不是 onkeypress

addEventListener allows adding more than a single handler for an event.

document.body.onkeypress = function(e){...} 将覆盖其他函数。

<p id="text">text</p>

<p id="text1">text1</p>

<button id="myBtn">text</button>

<button id="myBtn1">text1</button>

<script>
document.getElementById("myBtn").addEventListener("click", foo);

document.getElementById("myBtn1").addEventListener("click", bar);

function foo() {
var target = document.getElementById("text");
document.body.addEventListener('keypress',(e)=>{
animateElem(target);
})
}

function bar() {
var target = document.getElementById("text1");
document.body.addEventListener('keypress',(e)=>{
animateElem(target);
})
}

function animateElem(elemFound){
var start = 0.3;
var increment = 0.3;

var id = setInterval(allOpacity, 100);

function allOpacity() {
if (start > 3) {
clearInterval(id);
elemFound.style.opacity = 0.5;
}
else {
start = start + increment;
elemFound.style.opacity = start % 1;
}
}
}

</script>

关于javascript - 如何向同一个事件添加多个事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55109334/

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