我正在使用jQuery为Tizen开发一个应用程序。 Tizen的鼠标事件还有很多不足之处,所以我不幸被迫创建自己的事件来解决平台的缺点。 (我已就此与三星联系,他们暗示他们可能会在未来的版本中解决这些问题)
出于这个原因,我已经实现了我的事件:
$currentlyHovered.trigger("tizenmouseout");
for(var i = oldStack.length - 1; i > matching; i--) {
$(oldStack[i]).triggerHandler("tizenmouseleave");
}
$newlyHovered.trigger("tizenmouseover");
for(var i = newStack.length - 1; i > matching; i--) {
$(newStack[i]).triggerHandler("tizenmouseenter");
}
我的tizenmouseover / tizenmouseout活动完美无缺。我的tizenmouseenter和tizenmouseleave事件大多有效,但在与jQuery live / delegated处理程序交互时会出现问题。
我相信这样做的原因是,对于spec,我的tizenmouseenter / tizenmouseleave事件不会冒泡。 jQuery在their documentation中简要提到了这一点:
在Internet Explorer 8及更低版本中,一些事件(例如更改和提交)本身并不会冒泡,但jQuery会将这些事件修补为冒泡并创建一致的跨浏览器行为。
他们暗示不起泡的事件是非标准的,只是过时浏览器的一个特征,而实际上,mouseenter / mouseleave事件不会冒泡,并且在每个主要的现代浏览器中都受支持。他们确实提到了他们手动修补这些非冒泡事件,这解释了为什么浏览器的本机mouseenter和mouseleave事件有效。
无论如何,当我调用自定义tizenmouseenter或tizenmouseleave事件时,不会触发委托处理程序。我无法将自定义事件更改为冒泡,因为这很大程度上会破坏它们的目的。
有没有办法可以以某种方式利用jQuery的事件冒泡补丁,以便我的自定义事件具有相同的行为?