JavaScript,点击按钮激活父事件监听器

标签 javascript html

我的页面上有两个用于尝试新事物的按钮。它们都使用链接到不同 JS 函数的“onclick”。 出于某种原因,第二个激活两者?而且我不知道我做错了什么。

HTML 看起来像这样:

<!DOCTYPE html>
<html>
    <head>
        <link HREF="styleTest.css" rel="stylesheet">

        <link rel="preconnect" href="https://fonts.googleapis.com">
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link href="https://fonts.googleapis.com/css2?family=Roboto+Serif:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">
    
        <script type="text/javascript" src="script.js"></script>

        <title>TEST</title>

    </head>

    <body>
        <div class="page">


        <div class="nav-container" onclick="hamburger(this)">
            
            <div class="ham-container">
                <div class="hamburger-1"></div>
                <div class="hamburger-2"></div>
                <div class="hamburger-3"></div>
            </div> 

            <div class="nav-bar">
                <a>Home</a>     
                <a>Services</a>     
                <a>About</a>    
                <a>Projects</a>
            </div>



            <div class="button-test">
                <button onclick="clickTest()">CLICK ME</button>
                <h1>Test text</h1>
            </div>

        </div>


    </body>

还有两个JS函数:

function hamburger(x) {
    x.classList.toggle("change");
  }

var i =0

function clickTest() {
  i++;
  console.log(i)
}

我做错了什么?

最佳答案

当你在一个元素上触发一个事件时,它会依次触发它的父亲,它的祖父......一直到最后一个父元素。通常我们看不到这种行为的发生,因为我们通常在一个元素的家族中有一个事件监听器。

但是如果被触发的元素位于父元素中,该父元素具有针对同一事件的事件监听器,就像您的情况一样,它们都将被触发。但是,您可以借助 stopPropagation 方法来防止这种行为,方法如下:

function clickTest(e) {
  e.stopPropagation();
  i++;
  console.log(i)
}

关于JavaScript,点击按钮激活父事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71386911/

相关文章:

html - 调整表格的最后一列以适应内容,但不是第一列

html - 背景图像在服务器上的呈现方式与在本地主机上的呈现方式不同

javascript - 你如何放大到一个特定的点(没有 Canvas )?

javascript - 如何制作带有星号的 jquery 提示密码

javascript - React Native - 使用动态名称的图像需求模块

html - 带有动态播放列表的HTML5 mp3 + ogg播放

jquery - 表内表折叠未正确显示

javascript - 我有一个 HTML5 Canvas ,我想制作该 Canvas 的动画 GIF

javascript - 通过 JavaScript 中的正则表达式将数字格式化为特定格式

javascript - Android Webview 无法处理 javascript?