【问题标题】:jQuery's hover event type is printed as mouseover and mouseenterjQuery 的悬停事件类型打印为 mouseover 和 mouseenter
【发布时间】:2013-04-18 11:59:59
【问题描述】:

看这张照片:

这是错误还是标准?

PS:args 之后的鼠标悬停只是一个标签。

事件监听器

$ ->
  $('.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

【问题讨论】:

  • 你能显示来自事件监听器的代码吗?你用过 jQuery 吗?
  • 是的。是的。更新中...

标签: jquery google-chrome console


【解决方案1】:

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

你的event实际上是jQuery事件,所以它的类型是mouseenter

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

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

当你使用.hover() 时,jQuery 会监听这些进入和离开事件来触发它的开启和关闭。

【讨论】:

    【解决方案2】:

    jQuery.fn.hover 是别名:

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

    那些mouseentermouseleave 方法本身也是just shortcutsspecial treatment

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2014-04-15
      • 2012-02-10
      • 1970-01-01
      相关资源
      最近更新 更多