【问题标题】:detecting mouseout event in IE8在 IE8 中检测 mouseout 事件
【发布时间】:2014-12-09 01:12:46
【问题描述】:

我在 IE8 中检测用户何时离开窗口时遇到了一个小问题。我知道 addEventListener 方法仅在 IE9+ 版本中受支持,所以我想出了这个解决方案:

function popUp() {
    console.log("i'm leaving")
}

if (window.addEventListener) {
    window.addEventListener("mouseout", popUp);
} else {
    window.attachEvent("mouseout", popUp);
}

它在所有主流浏览器中都能正常工作,但在 IE8 中仍然失败。我希望使用 jQuery 可以解决问题:

$(window).mouseout(function(){
    popUp()
})

但是,由于this information,鼠标悬停和鼠标悬停事件在 IE8 中的窗口上都不起作用。

所以问题是,我怎样才能让它在这个已经过时但不幸的是仍然流行的浏览器中工作?任何帮助将不胜感激

【问题讨论】:

  • 我已经看到@MarsOne 提供的问题,但我并不关心 addEventListener 是否在 IE8 中工作,我知道它没有。我只需要找到一种解决方法,即无法在 IE8 中将 mouseout、onmouseout 或 mouseleave 附加到窗口对象

标签: javascript jquery internet-explorer-8 mouseleave mouseout


【解决方案1】:
window.attachEvent("onmouseout", popUp);

你迷路了

【讨论】:

    【解决方案2】:

    当这些浏览器最新(很久以前)获得指针在浏览器之外的触发事件的唯一方法是等待blur 事件(这涉及用户点击外部):

    window.attachEvent
      ? window.attachEvent('onblur', method)
      : window.addEventListener('blur', method);
    

    http://www.quirksmode.org/dom/events/blurfocus.html

    或者使用实际上具有此功能的 Flash —— 至少在舞台之外。

    后备 JavaScript 方法(或者至少是我所知道的)是在窗口框架内部周围有一个细边框,如果鼠标移动到该区域上,它将被视为外部。但是,如果鼠标移动得太快,该区域将被跳过,并且不会触发虚假的“mouseout”事件,这也不是绝对可靠的。

    +-----------------------------+
    | +-------------------------+ |
    | |                         | |
    | |                         | |
    | |     NOT ACTUAL SIZE *   | |
    | |                         | |
    | |                         | |
    | +-------------------------+ | <-- border region
    +-----------------------------+
    

    * 任何对屏幕的 ASCII 表示的引用,无论是活的还是死的,纯属巧合。

    所以不理想,但这些过时的浏览器也不理想 - 至少在现代眼中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-28
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2011-01-17
      • 2011-04-13
      相关资源
      最近更新 更多