提问人:ilan 提问时间:11/7/2023 最后编辑:TimMcYeahilan 更新时间:11/8/2023 访问量:69
如何在内部 div 元素中启动 onClick 函数
How to fire up onClick function in inner div element
问:
我正在尝试构建一个聊天页面,我可以像在 WhatsApp 中一样添加用户,并让每个聊天的每次点击都会根据所选的聊天做出响应。
<div id="list_chat">
{contacts.map(contact => (
<ContactBlock
receiver={contact.receiver}
username={contact.username}
displayName={contact.displayName}
password={contact.password}
profilePic={contact.profilePic}
time={contact.time}
lastmessage={contact.lastmessage}
key={contact.username}
/>
))}
</div>
function ContactBlock({ receiver, username, displayName, password, profilePic, time, lastmessage}) {
const handleClick = () => {
console.log(`Clicked on contact with username:`,);
};
return (
<div className="block" id="contact_block" onClick={handleClick}>
<div className="imgbx">
<img src={profilePic} alt="not found" className="cover" />
</div>
<div className="details">
<div className="listhead">
<h4>{displayName}</h4>
<p className="time">{time}</p>
</div>
<div className="message_p">
<p>{lastmessage}</p>
</div>
</div>
</div>
);
}
export default ContactBlock;
我无法激活 onClick on ContactBlock,但它适用于“list_chat”div。 当我单击 ContactBlock 时,它指的是“list_chat”div。
答:
1赞
Kelechi Daniels
11/7/2023
#1
当您单击 时,事件可能会传播到父 div,其 id 为 。这可能是由于事件捕获造成的。ContactBlock
list_chat
添加以防止此行为。event.stopPropagation()
handleClick
const handleClick = (event) => {
event.stopPropagation();
console.log(`Clicked on contact with username: ${username}`);
};
或者,可以使用 指定事件发生时的元素顺序:addEventListener
访问 https://www.w3schools.com/js/tryit.asp?filename=tryjs_addeventlistener_usecapture 查看
评论
0赞
Mark Schultheiss
11/8/2023
我们是否可以用这个参考来代替另一个参考:developer.mozilla.org/en-US/docs/Web/API/EventTarget/......或者还包括规范链接 w3.org/2003/01/dom2-javadoc/org/w3c/dom/events/EventTarget.html
0赞
Kelechi Daniels
11/8/2023
它们看起来很足智多谋,所以它们也可以使用
0赞
ilan
11/8/2023
@Kelechi丹尼尔斯,我尝试了这个答案,但没有用。当我单击“contact_block”div 时,它在控制台上没有任何显示。我也尝试了第二种解决方案,但它也不起作用,我在 ContactBlock 之后呈现的组件上定义了 listner,以便它可以激活 getElementById。
0赞
Kelechi Daniels
11/8/2023
我不了解您是如何实施该解决方案的,但@MarkSchultheiss提供了一些可能对您有所帮助的资源
评论
id="contact_block"