子元素触发其父元素的onClick事件。

huangapple go评论105阅读模式
英文:

Child triggers the onClick event of its parent

问题

我有一个父元素div,我在其上设置了一个onClick事件处理程序,但它被其子元素触发。我只想在单击父元素时筛选出父元素的一个子元素。我将使用状态创建一个多选列表,这就是我需要的原因。

这是我的代码:

  1. import { useState, useEffect } from "react";
  2. import events from "../utils/events.js";
  3. import "../styles/events.scss";
  4. const Events = () => {
  5. const [selectedEvent, setSelectedEvent] = useState(events[0].id);
  6. return (
  7. <div className="events-container">
  8. <div className="events">
  9. <div className="events-cards">
  10. {events.map((event) => (
  11. <div
  12. key={event.id}
  13. className="event"
  14. onClick={(e) => {
  15. const date = e.target.querySelector(".date");
  16. date.classList.add("selected-event");
  17. }}
  18. >
  19. <p className="date">{event.date}</p>
  20. <h1 className="name">{event.name}</h1>
  21. <p className="description">{event.description}</p>
  22. </div>
  23. ))}
  24. </div>
  25. </div>
  26. </div>
  27. );
  28. };
  29. export default Events;

希望这有助于你的问题。

英文:

I have a parent, div, on which I've set an onClick event handler, but it is trigerred by its childrens. All I want to do is to filter one child of the parent element when the parent is clicked. I will do a list o multiple choices, using states, so that's why I need it.

Here's my code:

  1. import { useState, useEffect } from &quot;react&quot;;
  2. import events from &quot;../utils/events.js&quot;;
  3. import &quot;../styles/events.scss&quot;;
  4. const Events = () =&gt; {
  5. const [selectedEvent, setSelectedEvent] = useState(events[0].id);
  6. return (
  7. &lt;div className=&quot;events-container&quot;&gt;
  8. &lt;div className=&quot;events&quot;&gt;
  9. &lt;div className=&quot;events-cards&quot;&gt;
  10. {events.map((event) =&gt; (
  11. &lt;div
  12. key={event.id}
  13. className=&quot;event&quot;
  14. onClick={(e) =&gt; {
  15. const date = e.target.querySelector(&quot;.date&quot;);
  16. date.classList.add(&quot;selected-event&quot;);
  17. }}
  18. &gt;
  19. &lt;p className=&quot;date&quot;&gt;{event.date}&lt;/p&gt;
  20. &lt;h1 className=&quot;name&quot;&gt;{event.name}&lt;/h1&gt;
  21. &lt;p className=&quot;description&quot;&gt;{event.description}&lt;/p&gt;
  22. &lt;/div&gt;
  23. ))}
  24. &lt;/div&gt;
  25. &lt;/div&gt;
  26. &lt;/div&gt;
  27. );
  28. };
  29. export default Events;

答案1

得分: 1

你可以在事件对象上使用stopPropagation()方法。这将阻止事件冒泡到DOM树的上层,并阻止它达到父元素。

  1. onClick={(e) => {
  2. // 阻止点击事件传播到父div
  3. e.stopPropagation();
  4. const date = e.currentTarget.querySelector(".date");
  5. date.classList.add("selected-event");
  6. }}
英文:

you can use the stopPropagation() method on the event object. This will stop the event from bubbling up the DOM tree and prevent it from reaching the parent element.

  1. onClick={(e) =&gt; {
  2. // Stop the click event from reaching the parent div
  3. e.stopPropagation();
  4. const date = e.currentTarget.querySelector(&quot;.date&quot;);
  5. date.classList.add(&quot;selected-event&quot;);
  6. }}

huangapple
  • 本文由 发表于 2023年7月24日 19:36:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/76754085.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定