如何在内部 div 元素中启动 onClick 函数

How to fire up onClick function in inner div element

提问人:ilan 提问时间:11/7/2023 最后编辑:TimMcYeahilan 更新时间:11/8/2023 访问量:69

问:

我正在尝试构建一个聊天页面,我可以像在 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。

JavaScript HTML ReactJS 节点 .js onclick

评论

0赞 Ali 11/7/2023
你能澄清一下问题是什么吗?
0赞 Mark Schultheiss 11/9/2023
相关,这是重复的吗?stackoverflow.com/q/28268835/125981另请注意,您有,因此渲染的页面上应该只有其中之一。否则,这将生成无效的 HTMLid="contact_block"

答:

1赞 Kelechi Daniels 11/7/2023 #1

当您单击 时,事件可能会传播到父 div,其 id 为 。这可能是由于事件捕获造成的。ContactBlocklist_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提供了一些可能对您有所帮助的资源