面试题整理一:javascript中的事件

来源:互联网 发布:数据仓储具有以下特征 编辑:程序博客网 时间:2024/05/16 09:58

1、事件对象:

e=e||window.event;     //IE和Chrome下是window.event, FF下是e

2、事件源:

e=e.target||e.srcElement ; //IE和Chrome下是srcElement FF,下是target

3、事件注册

ie:

element.attachEvent(type, function);
element.detachEvent(type, function); 

非ie:

element.addEventListener(type,function,flag)
element.removeEventListener(type,function,flag); 

element:文档节点、document、window 或 XMLHttpRequest。
type :字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
function:实现了 EventListener 接口或者是 JavaScript 中的函数。
flag:是否使用捕捉,一般用 false。(true表示事件捕捉阶段执行,false表示事件冒泡阶段执行)

4、阻止事件冒泡

ie:e.cancelBubble=true;

非ie:e.stopPropagation();

5、阻止默认事件

ie:e.returnValue=false;

非ie:e.preventDefault;

6、事件流:事件冒泡和时间捕捉

捕获阶段是由上层元素到下层元素的顺序依次。而冒泡阶段则正相反。

7、事件委托:

如果你有一个很多行的大表格,在每个<tr>上绑定点击事件是个非常危险的想法,因为性能是个大问题。流行的做法是使用事件委托。
事件委托描述的是将事件绑定在容器元素上,然后通过判断点击的target子元素的类型来触发相应的事件。
事件委托依赖于事件冒泡

myTable.onclick = function () {
e = e || window.event;
var targetNode = e.target || e.srcElement;
// 测试如果点击的是TR就触发
if (targetNode.nodeName.toLowerCase() === 'tr') {
alert('You clicked a table row!');
}

0 0