cat*_*eye 0 javascript delegation event-handling
我希望只有在单击正确的按钮时才调用指定的函数.
function callback(func){
func();
}
Run Code Online (Sandbox Code Playgroud)
主要功能及其结果:
尝试A:
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('num1').addEventListener('click', callback(function1));
document.getElementById('num2').addEventListener('click', callback(function2));
});
Run Code Online (Sandbox Code Playgroud)
结果:打开页面并单击任何按钮将运行function1
尝试B:
document.addEventListener('click', function () {
document.getElementById('num1').addEventListener('click', callback(function1));
document.getElementById('num2').addEventListener('click', callback(function2));
});
Run Code Online (Sandbox Code Playgroud)
结果:单击页面上的任意位置将运行function1
尝试C:
document.getElementById('num1').addEventListener('click', callback(function1));
document.getElementById('num2').addEventListener('click', callback(function2));
Run Code Online (Sandbox Code Playgroud)
结果:打开页面并单击按钮将运行function1并重新加载页面
尝试D:
document.addEventListener('click', function () {
//The first ID doesn't exist
document.getElementById('imaginaryNum1').addEventListener('click', callback(function1));
document.getElementById('num1').addEventListener('click', callback(function1));
document.getElementById('num2').addEventListener('click', callback(function2));
});
Run Code Online (Sandbox Code Playgroud)
结果:单击页面上的任意位置将运行function1
尝试E:
//The first ID doesn't exist
document.getElementById('imaginaryNum1').addEventListener('click', callback(function1));
document.getElementById('num1').addEventListener('click', callback(function1));
document.getElementById('num2').addEventListener('click', callback(function2));
Run Code Online (Sandbox Code Playgroud)
结果:打开页面并单击按钮将运行function1并重新加载页面
当然,为什么不呢.但是,看看你的代码,你可能会更好地委托事件:它并不难.基本上,在包含每个单独元素的dom中的级别上侦听所需的事件,并以这样的方式编写处理程序,以便检查触发事件的元素是否有意义,如果是这样的话:处理事件如果没有,就回来吧.
你也错过了第三个参数,它addEventListener需要:一个布尔值,表示你想要在捕获阶段处理事件的天气,或冒泡阶段,阅读有关quirksmode的几篇文章,特别是在不同的阶段
我也注意到你使用处理程序函数做了一些奇怪的事情,你会遇到一些问题.基本上,addEventListener期望作为第二个参数的是对函数的引用,您传递函数的返回值(在您的情况下未定义).
function clickHandler(e)//accept event argument
{
e = e || window.event;
var target = e.target || e.srcElement;
if (!target.id.match(/num[0-9]/))
{//the clicked element doesn't have num1, num2, num3... as id, no need to handle this event
return e;
}
//handle event. target is a reference to the clicked element
}
document.body.addEventListener('click',clickHandler,false);//<-- just the function name, no parentheses
Run Code Online (Sandbox Code Playgroud)
这就是你所需要的,一个能够处理所有点击事件的听众.
以下是我发布的几个JS问题,处理事件委托,查看代码,阅读我链接的文章,你很快就会解决.
在IE中委派更改事件 - 棘手
避免IE <9中的内存泄漏与onload监听器:我对问题的回答使用委托增加IE <9中
的事件原型
| 归档时间: |
|
| 查看次数: |
3833 次 |
| 最近记录: |