Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中中断一系列事件_Javascript - Fatal编程技术网

在javascript中中断一系列事件

在javascript中中断一系列事件,javascript,Javascript,这个小JavaScript页面包含A标记,可以单击或使用左右箭头访问这些标记。在这两种情况下都应该调用相同的函数。当前的解决方案是在左箭头或右箭头上聚焦(),并调用相同的函数onmousedown和onfocus: function tab(e) { //incomplete, just for illustration purposes var as = document.getElementById("areas"); if (e.keyCode === 37 || e.ke

这个小JavaScript页面包含
A
标记,可以单击或使用左右箭头访问这些标记。在这两种情况下都应该调用相同的函数。当前的解决方案是在左箭头或右箭头上聚焦(),并调用相同的函数onmousedownonfocus

function tab(e) {     //incomplete, just for illustration purposes
  var as = document.getElementById("areas");
  if (e.keyCode === 37 || e.keyCode === 39) {
  as.firstChild.focus();
  ...
}

...
a.onmousedown = mousedown;
a.onfocus = mousedown;
这样做的不便之处在于,单击标记也会将其聚焦,并且该函数将被调用两次

function mousedown(e) {
  if (Date.now() - lastEvent < 100) {
    return;                                       
  }
  else {
    lastEvent = Date.now();
  }
  ...
功能鼠标向下(e){
如果(Date.now()-lastEvent<100){
回来
}
否则{
lastEvent=Date.now();
}
...
这就是当前的解决方案:记住mousedown()调用的起始时间(毫秒),如果另一个调用在100ms之后到达,则必须在同一用户单击期间连续执行onmousedown和onfocus

有更好的解决方案吗?
e.cancelbubble=true;
不起作用,因为这是两个不同的事件。有什么方法可以阻止整个事件链吗?我觉得一行比这次记住hack更优雅


谢谢。

您当前的解决方案可能是最好的。在工程中,这被称为“去抖动”输入(该术语来源于按下物理开关触点时的“[电气和机械])

阻止
mousedown
事件的默认操作可能会阻止
focus
事件,但我认为这可能会产生令人不快的副作用,而您当前的解决方案包含得很好。

e.cancelbubble=true;
不会工作,因为这是两个不同的事件。”而且它只是IE而已。