javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick

 更新时间:2009年02月04日 03:22:27   作者:  
昨天群里面的朋友问了个比较有意思的问题,keydown,keyup,keypress事件的先后顺序。
这里给出一段测试代码:
<script type="text/javascript">
document.onkeydown = function(){
document.getElementById("test").innerHTML += "keydown<br/>";
}
document.onkeyup = function(){
document.getElementById("test").innerHTML += "keyup<br/>";
}
document.onkeypress = function(){
document.getElementById("test").innerHTML += "keypress<br/>";
}
</script>
<div id="test"></div>
测试结果为:
keydown
keypress
keyup
显而易见,事件发生的顺序是: keydown --> keypress --> keyup
当按住一个键一段时间后再放开时,结果为:
keydown
keypress
keydown
keypress
keydown
keypress
keydown
keypress
...
keyup
n个keydown和n个keypress,1个keyup,系统设置的时间间隔.
关于click和dblclick
前段时间群里面的一个朋友问过一个关于click和dblclick的问题,在这里同时也整理一下,他的要求是click和dblclick有不同的事件处理程序,但是如果触发了dblclick则对click不做处理.如何解决?
我们先来看一下事件的发生情况,测试代码如下:
<script type="text/javascript">
document.onclick = function(){
document.getElementById("test").innerHTML += "click<br/>";
}
document.ondblclick = function(){
document.getElementById("test").innerHTML += "dblclick<br/>";
}
</script>
<div id="test"></div>
双击时结果如下:
click
dblclick
当放慢点击速度时,结果如下:
click
click
click
可见,dblclick时,首先会触发一个click事件,然后如果在系统设置的双击延迟时间范围内有第二次click事件,则被认为是dblclick事件.
那么如何解决这位朋友提出的问题呢?给出代码如下:
<script type="text/javascript">
function clickTest(){
document.getElementById("test").innerHTML += "click<br/>";
}
function dblclickTest(){
document.getElementById("test").innerHTML += "dblclick<br/>";
}
document.onclick = function(){
this.timeout = window.setTimeout(clickTest,300);
}
document.ondblclick = function(){
if(this.timeout)window.clearTimeout(this.timeout);
dblclickTest();
}
</script>
<div id="test"></div>
双击测试结果如下:
dblclick
dblclick
dblclick
dblclick

相关文章

  • 一文理解JavaScript装饰器模式

    一文理解JavaScript装饰器模式

    这篇文章主要介绍了一文理解JavaScript装饰器模式,文章基于JavaScript的相关资料展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • javascript实现放大镜功能

    javascript实现放大镜功能

    这篇文章主要为大家详细介绍了javascript入门之实现放大镜功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • jquery根据锚点offset值实现动画切换

    jquery根据锚点offset值实现动画切换

    点击后僵硬的切换是不是很不爽,下面为大家介绍的是根据锚点offset值来实现动画切换,喜欢的朋友不要错过
    2014-09-09
  • JavaScript实现事件的中断传播和行为阻止方法示例

    JavaScript实现事件的中断传播和行为阻止方法示例

    这篇文章主要给大家介绍了利用JavaScript实现事件的中断传播和行为阻止的方法示例,文中给出了详细的介绍和示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
    2017-01-01
  • javascript背景时钟实现方法

    javascript背景时钟实现方法

    这篇文章主要介绍了javascript背景时钟实现方法,涉及javascript时间及页面元素样式的相关操作技巧,需要的朋友可以参考下
    2015-06-06
  • 利用JS将图标字体渲染为图片的方法详解

    利用JS将图标字体渲染为图片的方法详解

    在软件开发中肯定要用到图标,比如下图的 Groove 音乐中就用到了许多图标。一种获取这些图标的方法是把 Groove 音乐截个图,然后熟练地开启 Photoshop,开始抠图。这种方式很逊,效率也很低。本文将利用JS将图标字体渲染为图片,需要的可以参考一下
    2022-05-05
  • ES6中Set和Map用法实例详解

    ES6中Set和Map用法实例详解

    这篇文章主要介绍了ES6中Set和Map用法,结合实例形式详细分析了ES6中Set和Map的基本功能、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2020-03-03
  • js方法数据验证的简单实例

    js方法数据验证的简单实例

    下面小编就为大家带来一篇js方法数据验证的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • JavaScript如何实现LRU缓存淘汰算法

    JavaScript如何实现LRU缓存淘汰算法

    LRU(Least Recently Used)缓存淘汰算法是一种常见的缓存淘汰策略,它的核心思想是优先淘汰最近最少使用的缓存数据,以保证缓存中的数据始终是最热门的。本文主要介绍了一些关于如何实现LRU缓存淘汰算法的方法,感兴趣的小伙伴可以参考一下
    2023-04-04
  • javascript判断两个IP地址是否在同一个网段的实现思路

    javascript判断两个IP地址是否在同一个网段的实现思路

    要判断两个IP地址是否在同一个网段,将它们的IP地址分别与子网掩码做与运算,得到的结果为网络号,具体实现如下,需要的朋友可以参考下
    2013-12-12

最新评论