CSS/Javascript-Do“;显示:无”;暂时删除任何关联的事件侦听器
CSS / Javascript - Does "display:none" remove any associated event listeners temporarily?
我更多地考虑效率。如果我选择将元素的显示设置为none
,javascript会继续侦听附加到它的事件吗?还是会临时删除它们,直到恢复显示?
这取决于发生的事件类型。让我们尝试使用click
事件:
$(function () {
// Let's attach an event.
$("#eventContainer").click(function () {
$("#eventAffected").html("I changed.");
});
// This will hide the container surely when you click.
$("#hide-container").click(function () {
$("#eventContainer").hide().css("display", "none");
});
// This will trigger the event on the element.
$("#trigger-event").click(function () {
$("#eventContainer").trigger("click");
});
});
* {font-family: 'Segoe UI'; margin: 5px;}
#eventContainer, #eventAffected {background-color: #ccf; text-align: center; padding: 5px;}
#eventAffected {background-color: #cfc;}
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<div id="eventContainer">Hello I am the Event Box</div>
<div id="eventAffected">Hello, I change when event triggered on the above.</div>
<button id="hide-container">Hide</button>
<button id="trigger-event">Trigger Click</button>
测试用例
- 单击第一分区。 第二分区更改,事件被触发
- 单击触发器单击 第二次潜水变化,事件被触发
- 单击隐藏并触发单击 第二次潜水变化,事件被触发
结论
无论DOM元素是否在屏幕上或屏幕外可见,所有事件和行为都会被保留。只有CSS显示被更改。除此之外,任何与行为相关的内容都不会受到影响。
这与所有事件类似,只是您不能计算维度或框模型。
因此,这表明当存在visibility: hidden
或display: none
时,事件会被保留。
不,它不会删除它们,但由于元素及其所有子代都没有呈现,用户无法在其中任何一个上触发事件,因此浏览器永远不会测试元素是否有任何事件处理程序。
相关文章:
- 从dom中删除任何元素后,Touchmove事件停止触发
- 在jquery中是否有任何方法或位置可以编写从Dom中删除页面后调用的方法
- 将数组中的重复项转换为唯一项,而不删除Javascript中的任何项
- 只需要谷歌地图上的 2 个标记.删除之前的任何内容
- 从客户端删除任何会话
- 是否有任何方法可以去除“"打印时从阵列中删除
- 如何删除绑定到单击事件的任何jQuery操作
- 正在Jquery中的列表中不包含任何元素的列表中删除
- 检测用户是否没有't输入任何内容/删除输入jQuery
- Google Spreadsheets脚本可以删除找到字符串的任何行
- 删除HTML脚本标记会对它所包含的JavaScript产生任何影响吗
- 单击父类中的任何内容时,从父类中删除该类
- Redis 客户端不会删除任何内容
- jQuery - 删除表格行(如果任何单元格包含介于 X 和 Y 之间的值)
- 如何从骨干视图中正确删除任何必要的内容
- 角度 - 拼接从数组中删除除所需对象以外的任何内容
- 如何通过按 id 注册但未在任何 DOM 节点中引用来删除 dojo 小部件
- 将数字舍入到小数点后两位,并删除任何其他小数点
- Jquery 在输入任何值后删除文本框中的“0”
- JavaScript aws-sdk S3 deleteObject(s) 成功,但实际上并没有删除任何内容