javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick

  这里给出一段测试代码:

  <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