- 论坛徽章:
- 0
|
今天在经典论坛一位朋友写了这样一段代码:
不能输入,只能粘贴
可以输入,但不能粘贴
正常的textarea
我总对这种写法有所不理解,后来经过小胖指点才茅塞顿开,原来浏览器有自动监听功能,一旦读取代码后对所有的事件的发生都会监听,因此,一旦发生某事件,则执行其“=”后的代码,即使脚本里不指明某个事件发生所要执行的某些代码,监听器也要监听这个事件,只是返回一个空的执行罢了。最后小胖推荐看:
var a={}
a.click=function(){alert(1);}
addEventListener("click",a)
addEventListener("click",function(){alert(2);})
//广播事件
dispatchEvent({type:"click"});
//解析器
function addEventListener(event, handler){
var queueName = "__q_" + event;
if (this[queueName] == undefined)
this[queueName] = new Array();
this[queueName].push(handler);
}
function dispatchEvent(eventObj){
if (eventObj.target == undefined)
eventObj.target = this;
this.dispatchQueue(this, eventObj);
}
function dispatchQueue(queueObj, eventObj){
var queueName = "__q_" + eventObj.type;
var queue = queueObj[queueName];
if (queue != undefined){
var i;
for (i in queue){
var o = queue;
var oType = typeof(o);
if (oType == "object"){
if (o.handleEvent == undefined)
o[eventObj.type](eventObj);
else // this is the DOM3 way
o.handleEvent(eventObj);
}
else
o.apply(queueObj, [eventObj]);
}
}
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15511/showart_97452.html |
|