如何将多个事件处理程序添加到同一个html元素中,并根据事件执行不同的方法
How to add multiple eventhandler to same html element and do exeecute different method according to event?
我试图根据事件处理程序在HTML元素上执行不同的函数,例如,如果我单击p标记,它的背景应该变为红色,但如果我双击,应该会发生其他事情。我最初是这样做的,但有很多错误,比如如果我三次单击,那么要通过单击执行的函数就会运行,但双击方法工作得很好。有更好的解决方案吗?
我最初做的事情是这样的:
//Event 1
var p = document.getElementById("textNode");
p.addEventListener('dblclick', function init() {
//some code
}, false);
// Event 2
var element = document.getElementById("textNode");
element.addEventListener('click', elemEventHandler, true);
在同一个元素上同时使用click
和dblclick
事件有点棘手,因为要双击,必须单击并再次单击,所以(单次)单击处理程序不会触发任何错误。
如果您真的想同时使用这两种方法,那么单击事件处理程序应该使用setTimeout
(几百毫秒),如果dblclick处理程序触发,则应使用clearTimeout
。因此,为了检查dblclick,您将稍微延迟click事件处理。你需要决定如何处理三次点击等
但总的来说,我不认为同时使用click和dblclick是web开发中的常见做法。你可能需要考虑一个更好的替代方案。
看看这个教程
通过使用超时,您可以很容易地将它们合并到一个元素中。
<script>
var click = 0;
var t = undefined;
function doclick (click)
{
if (click == 1)
{
console.log('click');
$('#textNode').slideUp();
}
else if (click == 2)
{
console.log('dblclick');
$('#textNode').fadeOut();
}
clearTimeout(t);
delete window.t;
}
$(document).ready(function()
{
$('#textNode').click(function()
{
clearTimeout(t);
delete window.t;
t = setTimeout('doclick(1);', 500);
});
$('#textNode').dblclick(function()
{
clearTimeout(t);
delete window.t;
t = setTimeout('doclick(2);', 400);
});
});
</script>
<body>
<p id="textNode">TEST</p>
</body>
相关文章:
- 如何在onclick事件执行代码时在ImageButton上设置加载gif
- 如果类有多个事件处理程序方法,如何防止多个事件执行
- 单击事件执行单击和悬停事件处理程序,即使单击事件处理程序取消绑定所有处理程序也是如此
- 对多个滚动事件执行一次操作并防止滚动
- jQuery全局/本地事件执行顺序
- 作为预生成事件执行PowerShell脚本失败
- 允许对目标事件执行默认操作,并阻止对父级执行默认操作
- 使用点击jquery事件执行css3转换
- 阻止.mouseout事件执行
- 无法通过键盘事件执行功能
- 循环中的Javascript onclick事件执行了1次以上
- 如何将多个事件处理程序添加到同一个html元素中,并根据事件执行不同的方法
- 在Angular 2中处理click和clickOutside事件执行优先级的最佳方式
- 在mustache模板中对点击事件执行函数
- Java脚本函数,直到save事件执行完成
- 每个事件执行多次代码:多次下载
- 当onclick事件执行异步代码时,我如何在新选项卡请求中打开
- 在所有控制器中对同一个事件执行同一个函数——AngularJS
- Jquery事件执行两次
- 对img load事件执行html注释