Home > Web Front-end > JS Tutorial > body text

Ways to ensure event bubbling doesn't cause unnecessary problems

PHPz
Release: 2024-01-12 16:41:06
Original
715 people have browsed it

Ways to ensure event bubbling doesnt cause unnecessary problems

How to avoid unnecessary problems caused by event bubbling requires specific code examples

Event bubbling means that when an event on an element is triggered, adjacent The same event on the parent element will also be triggered. This event propagation mechanism may cause some unnecessary problems, such as being unable to accurately capture the event source, causing performance problems, etc. In order to avoid these problems, we can take some measures to prevent events from bubbling. This article will introduce several common methods and provide corresponding code examples for reference.

1. Use the stopPropagation() method

The stopPropagation() method can prevent the event from bubbling from continuing to propagate, thereby only triggering the event on the current element and not triggering the same event on other parent elements. event. Just call this method in the event handling function.

The sample code is as follows:

<div id="parent">
  <div id="child">
    <button id="btn">点击触发事件</button>
  </div>
</div>

<script>
document.getElementById('btn').addEventListener('click', function(e) {
  console.log('子元素被点击');
  e.stopPropagation();
});

document.getElementById('child').addEventListener('click', function() {
  console.log('子元素的父元素被点击');
});

document.getElementById('parent').addEventListener('click', function() {
  console.log('父元素被点击');
});
</script>
Copy after login

After running the above code, when the button is clicked, only the message that the child element was clicked will be triggered, but the message that the parent element was clicked will not be triggered.

2. Use event delegation

Event delegation refers to binding the event to the parent element, judging the event source through the event.target attribute, and performing the corresponding operation. In this way, you can avoid binding event handling functions to each child element, reducing code redundancy and maintenance complexity.

The sample code is as follows:

<ul id="list">
  <li>选项1</li>
  <li>选项2</li>
  <li>选项3</li>
  <li>选项4</li>
</ul>

<script>
document.getElementById('list').addEventListener('click', function(event) {
  if (event.target.tagName === 'LI') {
    console.log(event.target.textContent);
  }
});
</script>
Copy after login

After running the above code, the corresponding text content will be printed when each option is clicked, without binding a click event to each option.

3. Use the stopImmediatePropagation() method

The stopImmediatePropagation() method can not only prevent events from bubbling, but also prevent further execution of the event processing function, thus preventing other related events from being triggered. Just call this method in the event handling function.

The sample code is as follows:

<div>
  <button id="btn1">按钮1</button>
  <button id="btn2">按钮2</button>
</div>

<script>
document.getElementById('btn1').addEventListener('click', function(e) {
  console.log('按钮1被点击');
  e.stopImmediatePropagation();
});

document.getElementById('btn1').addEventListener('click', function() {
  console.log('按钮1被点击,但此函数不会执行');
});

document.getElementById('btn2').addEventListener('click', function() {
  console.log('按钮2被点击');
});
</script>
Copy after login

After running the above code, when button 1 is clicked, only the message that button 1 is clicked will be triggered, and the second bound click event will not be triggered.

To sum up, we can avoid unnecessary problems caused by event bubbling by using the stopPropagation() method, event delegation and stopImmediatePropagation() method. These methods can effectively manage the propagation of events and improve code readability and performance. We hope that the code examples provided in this article can help readers better understand and apply relevant knowledge.

The above is the detailed content of Ways to ensure event bubbling doesn't cause unnecessary problems. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!