使用jQuery.on不为SVG元素触发mouseenter / mouseleave事件

时间:2012-07-11 15:17:17

标签: jquery svg internet-explorer-9 raphael mouseevent

看看这个jsFiddle

当使用jQuery与SVG(Raphael 2.0)结合使用时,mouseenter / mouseleave似乎没有正确触发。我知道开箱即用的SVG jQuery与SVG不是100%兼容,但是,据我所知它似乎只影响IE9。

奇怪的是,如果你快速地在svg元素上移动你的鼠标(确保你在HTML窗格中这么做)并且回到它上面,事件会触发(但不是每次)。只是为了确保它不是on的一般问题,我每次都联系了click事件,该事件运行良好。

只是想知道是否有人知道这是一个错误还是一个已知问题?

2 个答案:

答案 0 :(得分:2)

这是1.7.2中的错误。请参阅ticket

如果我使用jQuery(edge)问题就会消失,所以应该在下一个预定版本(1.8)中修复。

答案 1 :(得分:0)

我认为重要的是要注意使用jQuery 1.8.2和android通过phonegap没有使用jq-mobile。我看到随机选择的触摸和鼠标事件并没有同步... 意味着微妙的差异触发鼠标输入和点击与不同的触摸触发相比较 touchStart(有时如果当前没有输入,则发送一个mouseEnter)然后2 touchEnds。 如果你有一个touchEvent触发器,则鼠标输入第二个触摸模式(开始,结束,结束)发送一个mouseLeave(假设你没有通过细微的分接差异随机触发一个点击组合)。

我的期望是它们应该在两种情况下一起触发,除了一个(触摸事件)更多地用于multiTouch需要,或者认识到在通过触摸界面模拟的点击事件之后不会有mouseLeave事件(不知何故) ?...)。 我的另一个期望是,如果我没有为鼠标事件处理或注册监听器,但是我做了触摸事件,反之亦然,根据听取或截获的内容,将会发送或不发送不同的事件(返回false?或者通过preventDefault等停止冒泡。

无论如何,在我看来,目前你需要以随机无连接的不可预测的方式处理这两种类型的事件,这对我来说意味着丢弃鼠标世界中最好被描述为触摸功能设备上的“过度”事件。

基本上我认为触摸不应该发送过/进入事件,而点击也应该触摸,如果我正在听触摸preventDefault应该取消所说的mouseEvents。

无论如何,发送两者都是最有意义的,让我把它整理出来。 我怀疑的困惑在于你只收听它发送的一半事件(缺少触摸)。 ...祝你好运!也许这些想法可以帮助某人处理更高级别或更低级别开发团队的混乱。 (这是否应该归咎于浏览器级别?我是这么认为的。)