#javascript #html #css #reactjs
#javascript #HTML #css #reactjs
Вопрос:
Рассмотрим следующий компонент React
export default function App() {
return (
<div className="App" onClick={() => console.log("on app div")}>
<div className="first" onClick={() => console.log("first div")}>
first
</div>
<div className="second" onClick={() => console.log("second div")}>
second
</div>
<div className="third">third</div>
</div>
);
}
Таким образом, щелчок по дочернему div в настоящее время запускает методы onClick как родительского, так и дочернего div. Но для первого дочернего элемента я бы хотел, чтобы запускался только дочерний метод onClick. Есть ли способ сделать это?
Я пытался присвоить дочернему div более высокое значение z-index, но он все еще запускает оба onClicks, вот css, который я пробовал
.App {
font-family: sans-serif;
text-align: center;
position: relative;
}
.first,.second,.third {
position: absolute;
width: 100px;
line-height: 100px;
text-align: center;
}
.first {
background: lightblue;
position: absolute;
z-index: 10;
}
.second {
background: lightcoral;
position: absolute;
left: 200px;
}
.third {
background: lawngreen;
position: absolute;
left: 100px;
}
Кто-нибудь может сказать, есть ли что-то не так с css, который я пробовал, или любым другим методом для достижения этой цели.
Комментарии:
1. e.preventdefault — это ваш frind здесь.
2. Event.preventDefault() и / или event.stopPropagation() могут помочь здесь внутри функций click
3. @AtulRajput не могли бы вы сказать, в какой div я должен добавить e.preventDefault
4. откуда вы не хотите, чтобы ваше событие переходило к его родительскому элементу, т.Е. К вашему дочернему элементу
Ответ №1:
вы должны использовать event.stopPropagation()
<div className="second" onClick={(event) =>
event.stopPropagation()
console.log("second div")
}>
second
</div>
Комментарии:
1. Это сработало, спасибо, не могли бы вы также сказать, имеет ли здесь какой-либо смысл подход, который я пробовал с z-index, т.е. Разве z-index не должен работать таким образом?
2. Подход Z-index для этого неверен, с помощью z-index вы можете управлять щелчком только по 2 родственным элементам, но в любом случае произойдет пузырьковое событие, и оно перейдет к родительскому, поэтому, если вы когда-нибудь захотите этого добиться, z-index не поможет, толькоданное решение будет.
3. это может сработать для вас, но может иметь побочные эффекты для стилей и в соответствии с документами e.stopPrppagation() — рекомендуемый способ