在javascript中中断一系列事件
这个小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
A
标记,可以单击或使用左右箭头访问这些标记。在这两种情况下都应该调用相同的函数。当前的解决方案是在左箭头或右箭头上聚焦(),并调用相同的函数onmousedown和onfocus:
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而已。