触摸板上的Chrome点击会触发mouseleave

时间:2015-04-14 13:39:35

标签: javascript google-chrome javascript-events mouseleave touchpad

最近,我的网站开始在Chrome中运行得非常奇怪。我发现在Chrome中,现在点击触摸板(自最近的更新?)会触发两个事件 - click和mouseleave。

<div id="tap">HOVER, TAP or CLICK</div>
<script>
tap.addEventListener("mouseleave",function(){alert("mouseleave");});
tap.addEventListener("click",function(){alert("click");});
</script>

以下是JSFiddle

到目前为止,似乎此问题仅适用于Google Chrome。在FF和Yandex(以铬为基础)中,假鼠舍无法发射。单击按钮(鼠标或触摸板按钮)也可以正常工作 - 没有鼠标左键。

如何防止鼠标悬停?或者,也许,有一种方法可以从真正的鼠标中分辨出一个tap-mouseleave?

2 个答案:

答案 0 :(得分:5)

我注意到,当Chrome中出现错误的点击行为时,我们可以检查mouseleave事件对象,以确定它是否是错误的行为:

mouseleave = function (e) {
  if (e.screenX === 0 && e.screenY === 0) {
    // BUG in Chrome
    return;
  }
  // Correct behavior...
}

或者,我们可以检查e.toElement和/或e.relatedTarget,因为我发现当错误行为发生时nullmouseleave = function (e) { if (!e.relatedTarget || !e.toElement) { // BUG in Chrome return; } // Correct behavior... }

;with cte
as
(
select dt.date as tb1,dt1.date as tbl2
from
@dates1 dt
full join
@dates2 dt1
on dt.date =dt1.date
)
select isnull(tb1 ,tbl2 ) as dt,
case when tb1 is  not null then 1 else 0 end as list1,
case when tbl2 is  not null then 1  else 0 end as list2
from cte

答案 1 :(得分:0)

我目前遇到同样的问题。你找到了解决方案吗?

我怀疑它与某些特定的CSS有关,因为我在两个不同的网站上有相同的mouseleave事件,但我只能在一个上看到这个问题。