将事件绑定到JavaScript中的元素
Binding event to the element in JavaScript
一般来说,当我想将某个事件绑定到元素时,我会直接将该事件绑定到元素。例如,我想将click事件绑定到"li"元素:
<ul id="ul_list">
<li class="t">xxxx</li>
<li class="t">xxxx</li>
.....
</ul>
var lis=document.getElementById("ul_list").children();
for(var i=0;i<lis.length;i++){
lis[i].onclick=function(){
console.info(this.innerHTML);
}
}
。
但是在一些开源代码中,我发现人们更喜欢将事件绑定到父元素:
document.onclick=function(e){
e=e==null?:window.event:e;
var target=e.target; //the browser is not considered here
if(target.className=='t' && target.localName='LI'){
console.info(target.innerHTML);
}
}
我想知道哪个更好?
同样,在处理拖动事件时,人们将mousemove
事件绑定到整个文档。为什么?
人们更喜欢将事件绑定到父元素
这被称为事件委托,当您希望为多个元素触发相同的事件处理程序时特别有用。不是将事件处理程序绑定到每个元素,而是将其绑定到一个共同的祖先,然后检查事件起源于哪个元素。这是可行的,因为事件会在DOM树中冒泡。
我想知道哪个更好?
视情况而定,两种方法各有利弊。
事件委托可能会更慢,因为事件必须首先冒泡。您还可能必须执行DOM遍历,因为事件可能不是源自您要测试的元素。例如,在您的示例中,li
元素可能有其他子元素,例如a
元素。要确定被单击的a
元素是否是li
的后代,您必须遍历祖先元素并对它们进行测试。
问题是,当拖动一个元素时,鼠标移动的速度通常比元素移动的速度快,然后离开元素。如果只将另外,有时候在处理拖拽效果时,人们总是将鼠标移动事件绑定到整个文档,为什么?
mousemove
事件绑定到被拖动的元素,那么每当光标离开元素时,移动就会停止。为了避免这种情况,将事件处理程序绑定到整个文档(在拖动过程中),以便移动顺利。
链接到父类意味着您将添加一个事件处理程序而不是多个。这将提高应用程序的性能!此外,如果向页面添加新元素,则不必担心绑定它们。
只有当模型设计不好的时候,你才需要取消活动。例如,您在li中有链接,您需要阻止它们执行默认操作。
在click
事件的情况下,最好直接绑定到受影响的元素,而不是绑定到所有元素-为什么您需要在单击与您完全不相关的东西时触发函数?
当元素分布在文档中并且很难"收集"它们时,例如当它们只有相同的类时,getElementsByClassName
在纯JavaScript中不是很有效,因为您需要遍历所有元素,所以在这种情况下,最好总是触发该函数并检查已单击的内容。
将处理程序绑定到最特定的事件和元素。
请注意(只是为了学究气!)你绑定的是一个处理程序到一个元素的事件,而不是"将一些事件绑定到一个元素"。
- 如何访问数组中的数组元素(JavaScript)
- 如何找到从中调用函数的元素(Javascript)
- 另一个元素JAVAscript中的元素位置
- 隐藏元素:Javascript属性和CSS样式之间的区别
- 如何比较数组中的元素(javascript)
- 使用一个函数来不同的元素 JavaScript
- 我需要从数组中获取一些元素 - JavaScript
- 元素 JavaScript 的读取宽度
- 识别数组的最后一个元素 - javascript
- 你如何使 Math.random 数组中的每一个第 9 个元素都是同一个元素?[JavaScript]
- 即时创建 Asp.Net 元素 Javascript
- 在提交表单上动态更改输入元素 javascript
- Kendo UI Grid 获取当前元素 javascript 的 ID
- 在我的 chrome 网上商店应用程序中禁用检查元素/JavaScript 控制台
- Canvas 元素 + Javascript 在 Chrome 和 Firefox 中工作,而不是在 Internet
- 对于在循环中不打印所有元素 - Javascript
- 选择元素 |Javascript vs Jquery.
- 无法删除 DOM 元素(JavaScript,CreateJS)
- 单击元素>JavaScript输出文档.activeElement VS.事件目标
- 当用户在文本框中输入数字时,将动态获得数组元素javascript或PHP