[英]Click Triggers Event Listener That It Creates
在下面的示例中,为什么单击按钮不仅会触发添加到按钮的事件侦听器,还会触发添加到正文的事件侦听器? 换句话说:为什么颜色会变成红色而不是绿色? 你如何防止这种情况发生?
$("button").on("click", function() { // Change Color $("body").css({ "background-color": "#3FE1B0" }); // Add New Event Listener... $("body").on("click", function() { //...Which Also Changes Color $(this).css({ "background-color": "#FF4F5E" }); }); });
/* Design Changes */ body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> <button>Click Me!</button>
你的问题是事件传播。 当用户使用您的原始代码单击按钮时会发生什么:
解决方案很简单:使用事件的stopPropagation
方法来阻止它向上传播:
$("button").on("click", function(event) { // Change Color $("body").css({ "background-color": "#3FE1B0" }); // Add New Event Listener... $("body").on("click", function() { //...Which Also Changes Color $(this).css({ "background-color": "#FF4F5E" }); }); event.stopPropagation(); });
/* Design Changes */ body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> <button>Click Me!</button>
问题的来源之一是单击<body>
内的<button>
会触发<body>
元素和<button>
元素的单击事件。 您需要使用event.stopPropagation()
来防止事件冒泡 DOM 树。
$("button").on("click", function(e) { $("body").css({ "background-color": "#3FE1B0" }); e.stopPropagation(); }); $("body").on("click", function(e) { $("body").css({ "background-color": "#FF4F5E" }); });
body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; }
<:DOCTYPE html> <html> <head> <script src="https.//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <title>Page Title</title> </head> <body> <button>Click Me!</button> </body> </html>
首先,您应该重新排列您的代码。
其次,使用stopPropagation
来防止触发两个点击处理程序。
试试下面的例子:
$("body").on("click", function(e) { $(this).css({ "background-color": "#FF4F5E" }); }); $("button").on("click", function(e) { e.stopPropagation() $("body").css({ "background-color": "#3FE1B0" }); });
/* Design Changes */ body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> <button>Click Me!</button>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.