jQuery悬停事件类型打印为mouseover和mouseenter

时间:2013-04-18 12:00:00

标签: jquery google-chrome console

看到这张照片:

enter image description here

这是一个错误还是标准?

PS:args之后的mouseover只是一个标签。

事件监听器

$ ->
  $('.bigger-on-hover').hover (event) ->

    console.log 'args'
    console.log arguments
    console.log @
    window.x = arguments
    window.y = @
    console.log 'args'
    console.log 'mouseover'
    console.log event.type

2 个答案:

答案 0 :(得分:1)

mouseenter仅在Internet Explorer中,但jQuery在其他浏览器中模仿它。

您的event实际上是jQuery事件,因此其类型为mouseenter

要查看原生事件,请使用event.originalEvent。您可以使用console.log(event.originalEvent.type)查看其类型。在非IE中,该类型为mouseover

jQuery听了那个鼠标悬停事件,当它听到它时,它检查鼠标指针是否已经在该元素上,发现它不是,然后触发了一个jQuery mouseenter事件。然后它将事件更改回mouseover,以便在冒泡时产生正常效果。

当您使用.hover()时,jQuery会侦听这些进入和离开事件以触发和关闭它。

答案 1 :(得分:1)

jQuery.fn.hover是别名:

jQuery.fn.extend({
    hover: function( fnOver, fnOut ) {
        return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );

这些mouseentermouseleave方法本身也是just shortcuts special treatment

console.log打印的对象不是冻结快照。如果在展开对象之前修改了对象,则修改后的版本将记录到控制台。这就是这里发生的事情。