gpt4 book ai didi

javascript - 事件监听器不返回所有事件类型的对象属性

转载 作者:行者123 更新时间:2023-11-30 13:51:03 25 4
gpt4 key购买 nike

const stars=document.querySelectorAll('.star')
const message=document.querySelector('.message')
const mouseEvents=["mouseover", "mouseout", "click"]
//creating star object
//add event listeners as array


stars.forEach((star, i)=> {
star.starNum=(i+1)
console.log(star.starNum)
mouseEvents.forEach((event)=> {
star.addEventListener(event, starRate)
})
})


function starRate(e) {
let num=e.target.starNum
console.log(num)
}
 ul {
list-style-type: none;
padding: 0;
}

.star {
display: inline-block;
color: #ddd;
font-size: 2.5em;
}
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
<link rel="stylesheet" href="styles.css">
</head>
<body>

<ul class="stars">
<li class="star"><i class="fa fa-star" aria-hidden="true"></i></li>
<li class="star"><i class="fa fa-star" aria-hidden="true"></i></li>
<li class="star"><i class="fa fa-star" aria-hidden="true"></i></li>
<li class="star"><i class="fa fa-star" aria-hidden="true"></i></li>
<li class="star"><i class="fa fa-star" aria-hidden="true"></i></li>
</ul>
<div class="message">Message</div>

</body>

<script src="app.js"></script>

</html>

我对每个星形元素应用了多个事件。但是,每当我单击将鼠标悬停在 星标上时,它都不会返回其starNum 属性的值,因为它应该从starRate 函数返回。当您将鼠标悬停在上面时,它只会返回一个数字。这是为什么?

最佳答案

The target property of the Event interface is a reference to the object that dispatched the event.

https://developer.mozilla.org/en-US/docs/Web/API/Event/target

这意味着你可以访问dom元素,但不能访问你想要的属性。您可以通过以下两种方式之一传递此属性。

第一种方式:使用data-*属性Documentation

修改您的 html 以包含您想要的数据

 <li class="star" data-starnumber="1"><i class="fa fa-star" aria-hidden="true"></i></li>

在您的 javascript 中,您可以直接引用数据。

function starRate(e) {
const num = e.target.dataset.starnumber;
console.log(num);
}



第二种方式:将自己需要的数据绑定(bind)到回调Documentation

您可以绑定(bind)要在函数调用中出现的数据。

stars.forEach((star, i) => {
star.starNum = i+1;
console.log(star.starNum);
mouseEvents.forEach((event) => {
star.addEventListener(event, starRate.bind(null, star);
});
});

function starRate(star, e) {
const num = star.starNum;
console.log(num);
}

关于javascript - 事件监听器不返回所有事件类型的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58238336/

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