首页app软件javascript控制css javascriptcsshtml有什么关系

javascript控制css javascriptcsshtml有什么关系

圆圆2025-11-05 22:00:42次浏览条评论

JavaScript与CSS:精确控制父容器点击事件及事件委托策略

本文在web开发中进行了深入探讨: 。通过详细解析javascript事件传播机制中的e.target与e.currenttarget差异,及css指针事件:无;属性的应用,提供了两个高效的解决方案。文章旨在帮助开发者理解并对dom事件流的精确控制,避免事件触发,优化用户交互体验。理解DOM事件传播机制

在W eb浏览器中,当用户与DOM元素(如点击按钮)交互时:捕获阶段)、目标阶段(目标阶段)和冒泡阶段(冒泡阶段)。捕获阶段: Image: Description: 2. AddEventListener注册的Use Capt ure设置为true,最终在捕获阶段触发)。这意味着,即使您在父容器上注册了事件,Description:件的实际来源(即e.target)仍然是子元素,这与我们e.target与e. currentTarget 的关键区别

在事件处理函数中,有两个非常重要的属性可以帮助我们识别事件的来源和监听器所填充的元素:e.target:始终DOM元素。例如,如果您点击了父容器内部的子元素, e.target就是该监听子元素。e.currentTarget:指向才事件监听器所浇注的DOM元素。例如,如果事件监听器注册在父容器或者点击父容器本身其内部的子元素,当该器被触发时,e.currentTarget都将是父容器。

理解这两个属性的区别是解决“父点击容器事件被子元素填充”的问题。

立即学习“Java免费学习笔记(深入)”;造点AI

夸克·造点AI 325查看详情解决方案一:利用JavaScript进行事件委托判断

当希望父容器的点击事件只在其直接被点击时触发,而不响应其子元素的点击时,可以通过比较e.target和e.currentTarget来判断事件是否来源于父容器本身。如果不一致,则说明点击发生在子元素上,此时可以选择忽略该事件。实现方法

在父容器的事件监听器执行。

lt;!DOCTYPE htmlgt;lt;htmlgt; lt;headgt; lt;meta http-equiv=quot;Content-Typequot; content=quot;text/html;charset=UTF-8quot;gt; lt;titlegt;JS事件委托示例lt;/titlegt; lt;stylegt; #container { padding: 20px; border: 2px 纯蓝色; background-color: lightblue; 光标: 指针; width: 300px; height: 150px; display: flex; flex-direction: column; justify-content: center;align-items: center; font-family: sans-serif; } #child1, #child2 { margin: 10px; padding: 10px; background-color: lightgreen; border: 1px Solid green;cursor: default; /* 子元素保持默认外观,以示区别 */ } lt;/stylegt; lt;/headgt; lt;bodygt; lt;h3gt;点击父容器或子元素,观察控制台输出lt;/h3gt; lt;div id=quot;containerquot;gt; 父容器(点击我) lt;div id=quot;child1quot;gt; 子元素1 lt;/divgt; lt;div id=quot内容;child2quot;gt; 子元素2 lt;/divgt; lt;/divgt;lt;pre class=quot;brush:php;工具栏:false;quot;gt;lt;scriptgt; document.getElementById(quot;containerquot;).addEventListener('click', (e) =gt; { //检查事件是否直接发生在container上 if (e.target !== e.currentTarget) { console.log('点击了子元素 (' e.target.id) '),忽略父容器的事件处理。

'); return; // 阻止后续代码执行 } console.log('点击了父容器本身!', e.currentTarget.id); });lt;/scriptgt;登录后复制

lt;/bodygt;l t;/htmlgt;注意事项与适用场景这种方法非常适合实现“事件委托”(事件委托:委托:了事件:点击事件逻辑,而父容器的事件处理逻辑只在其自身被点击时触发。此方法不会阻止事件的冒泡行为,只是在父下载以下内容:stopPropagation()指针事件: none;

如果您希望子元素完全不响应任何鼠类(包括点击、暂停等),并且不希望它们触发父元素的冒泡事件,那么可以使用CSS的pointer-events属性。实现方法

将pointer-events: none: none

;;;;CSS pointer-events 示例<;/title>;<style>;#container { padding: 20px;border: 2px solid blue;background-color: lightblue;cursor: pointer;width: 300px;height: 150px;display: flex;flex-direction: column;justify-content: center;align-items: center;font-family: sans-serif;} #child1,#child2 { margin: 10px;padding: 10px;background-color: lightcoral;border: 1px solid red;/* 关键:阻止子元素接收鼠标事件 */ pointer-events: none;}<style>;/style>; lt;/headgt; lt;bodygt; lt;h3gt;点击容器父或子元素视觉区域,观察控制台输出lt;/h3gt; lt;div id=quot;containerquot;gt; 父容器内容 (点击我) lt;div id=quot;child1quot;gt; 子元素1 (无法点击) lt;/divgt; lt;div id=quot;child2quot;gt; 子元素2 (无法点击) lt;/divgt; lt;/divgt;lt;pre class=quot;brush:php;toolbar:false;quot;gt;lt;scriptgt; document.getElementById(quot;containerquot;).addEventListener('click', (e) =gt; { console.log('点击了元素:', e.target.id); // 此时,即使点击的是child1或child2的视觉区域,e.target也可能是container });lt;/scriptgt;登录后复制</p><p>lt;/bodygt;lt;/htmlgt;注意事项适用场景当子元素设置pointer-events:none;之后,它们将不再响应任何鼠标事件(如click、mouseover、mouseout等)。</p><p>以上就是JavaScript与CSS:精确控制容器点击事件及事件委托策略的详细内容,更多请关注乐哥常识网其他相关文章!相关标签: css javascript java html js seo 浏览器 事件冒泡 ai win 区别 点击事件 JavaScript css html 委托 事件指针 对象 事件 dom 鼠标事件 大家都在看:掌握 Fancybox 4:在模态框架后继指定 CSS 类 JavaScript 如何获取元素_JavaScriptCSS 获取元素属性方法与实际案例使用HTML、CSS和JavaScript构建响应式图片轮播图教程 D3 SVG下载高效SVG路径React开发者如何掌握CSS:实用策略与Tailwind CSS入门</p></section> <div class="bzw-m-bot bzw-fs"><div class="pcd_ad"><script src="http://www.baguak.com/d/js/ecms335/ecms335diy8.js"></script></div><div class="mbd_ad"><script src="http://www.baguak.com/d/js/ecms335/ecms335diy9.js"></script></div></div> <section class="bzw-tct tags"><a href="http://www.baguak.com/tags-17491-0.html" target="_blank">JavaScript</a></section> <section class="bzw-flex p"> <span class="prev"><a href="http://www.baguak.com/zd/24370.html" title="上一篇:windows查看显卡 windows查看上一次开机时间">windows查看显卡 windows查看上一次开机时间</a></span> </section> </article> <div class="bzw-tct bzw-page-tit">相关内容</div> <ul class="bzw-m-bot bzw-flex bzw-page-list"> <li><i>1</i><a href="http://www.baguak.com/zd/24321.html">javascript字面量 javascript字符串怎么转换代码</a></li><li><i>2</i><a href="http://www.baguak.com/zd/24173.html">jquery如何隐藏div jquery隐藏</a></li><li><i>3</i><a href="http://www.baguak.com/zd/24146.html">js模块化原理及实现过程 js 模块 modules</a></li><li><i>4</i><a href="http://www.baguak.com/zd/24136.html">苹果手机启用JavaScript javascript优化技巧</a></li><li><i>5</i><a href="http://www.baguak.com/zd/24012.html">JavaScript实现大文件分片上传_javascript文件操作</a></li><li><i>6</i><a href="http://www.baguak.com/zd/23860.html">JavaScript中数字精确格式化为三位小数的技巧与陷阱</a></li><li><i>7</i><a href="http://www.baguak.com/zd/23533.html">javascript代码流程图 java script代码分析</a></li><li><i>8</i><a href="http://www.baguak.com/zd/23450.html">js动态创建html元素 js动态创建函数</a></li> </ul> <div class="bzw-tct bzw-page-tit">发表评论</div> <div id="divCommentPost" class="cpost"><a rel="nofollow" id="cancel-reply" href="#divCommentPost" style="display:none;" title="取消回复">✕</a> <form id="frmSumbit" target="_self" name="saypl" method="post" action="http://www.baguak.com/e/pl/doaction.php"> <input name="id" type="hidden" id="id" value="24372" /> <input name="classid" type="hidden" id="classid" value="2" /> <input name="enews" type="hidden" id="enews" value="AddPl" /> <input name="repid" type="hidden" id="repid" value="0" /> <input type="hidden" name="ecmsfrom" value="http://www.baguak.com/zd/24372.html"> <input name="password" type="hidden" class="inputText" id="password" value="" size="16" /> <input name="nomember" type="hidden" id="nomember" value="1" checked="checked" /> <p> <textarea name="saytext" id="txaArticle" class="text" cols="50" rows="4" tabindex="5" placeholder="请输入评论内容……"></textarea> </p> <div class="bzw-flex post-item"> <p class="item"> <input type="text" name="username" id="inpName" class="text" value="访客" size="28" tabindex="1"> <label for="inpName">昵称(*)</label> </p> <p class="item verify"> <input type="text" name="key" id="key" class="text" value="" size="28" tabindex="2" placeholder="验证码"> <img src="http://www.baguak.com/e/ShowKey/?v=pl" name="plKeyImg" id="plKeyImg" onclick="plKeyImg.src='http://www.baguak.com/e/ShowKey/?v=pl&t='+Math.random()" /> </p> </div> <div class="bzw-flex post-bot"><span class="ti"><b>游客</b> 回复需填写必要信息</span> <input name="sumbit" type="submit" tabindex="6" value="提交" class="button"> </div> </form> </div> <label id="AjaxCommentBegin"></label> <script src="http://www.baguak.com/e/pl/more/?classid=2&id=24372&num=10"></script> <div class="bzw-tct bzw-num-font bzw-pagebar commentpagebar"></div> <label id="AjaxCommentEnd"></label> </main> </div> </div> <footer class="bzw-tct footer"> <div class="bzw-wrap"> <p class="footmsg">Powered by <a href="http://www.baguak.com/" target="_blank">玩酷经验-玩转手机app</a> <a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">沪ICP备2024065674号-26</a></p> <p class="copyright">2023© All Rights Reserved.<span><script> var _czc = _czc || []; (function () { var um = document.createElement("script"); um.src = "https://s4.cnzz.com/z.js?id=1281338561&async=1"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(um, s); })(); </script></span></p> </div> </footer> <a href="#top" title="返回顶部" class="bzw-tct bzw-gotop">↑</a> </body> </html>