Kal*_*nin 0 javascript event-handling javascript-events
我以这种方式使用事件委托:
elWraper.onclick = (function(){
//how to get here "event" object
e = e || window.event;
var t = e.target || e.srcElement;
//event handler
return function(){
//manipulations with "t" variable
}
})();
Run Code Online (Sandbox Code Playgroud)
如何在立即执行的函数中获取"事件"对象?
sle*_*man 10
elWraper.onclick = (function(){
// misc stuff here
//event handler
return function(e){
e = e || window.event;
var t = e.target || e.srcElement;
//manipulations with "t" variable
}
})();
Run Code Online (Sandbox Code Playgroud)
在符合标准的浏览器中,事件对象是传递给回调函数的第一个参数.在IE中,它是一个全局变量(这e = e || window.event是试图确定的).因此,您返回的函数immediately executed function应该接受声明为其第一个(通常是唯一的)参数的事件对象.
澄清
由于人们在想(也许他们想知道为什么OP接受了这个答案),因此OP的问题并不清楚这一点.一种是创建一个变量的闭包来跟踪某些东西:
/* Count number of clicks,
* WITHOUT USING GLOBAL VARS!
*/
el.onclick = (function(){
var counter = 0;
return function(e){
e = e || window.event;
var t = e.target || e.srcElement;
counter ++;
alert('detected '+counter+' clicks!');
// do stuff with t or e ...
}
})();
Run Code Online (Sandbox Code Playgroud)
另外,这是在循环中分配事件处理程序的经典方法:
/* Use double closure to break closure in loop!
*/
for (var i=0; i<stuff.length; i++) {
var el = stuff[i];
el.onclick = (function(x){
return function(e){
e = e || window.event;
var t = e.target || e.srcElement;
alert(x);
// do stuff with t or e ...
}
})(i);
}
Run Code Online (Sandbox Code Playgroud)
或者也许OP只是认为他可以"缓存"事件对象而错误地认为他可以用它来做这件事.在这种情况下,阅读我的解释(而不仅仅是代码)应该启发读者为什么这是一个坏主意.
| 归档时间: |
|
| 查看次数: |
12949 次 |
| 最近记录: |