【问题标题】:Mouse Event Properties are Undefined on IE 11鼠标事件属性在 IE 11 上未定义
【发布时间】:2015-12-18 07:37:31
【问题描述】:

我使用以下代码来识别浏览器窗口关闭事件并在其他浏览器上按预期工作,但在 IE11 上不正常。因为这行代码只在 IE11 上给了我undefined alert(event.clientY+":"+event.clientX);。任何人都可以建议解决这个问题。

window.onbeforeunload = function(event) 
{
event= window.event|| event;
alert(event);
alert(event.clientY+":"+event.clientX);

    if(event.clientX <0 || event.clientY < 0)
    {   
        // ajax call to server to nullify the session.
        window.close();
    }
};

【问题讨论】:

标签: javascript debugging window internet-explorer-11 eventhandler


【解决方案1】:

从 MDN beforeunload event 你可以看到事件对象支持哪些属性。

不支持事件对象的clientX和clientY,所以未定义。

这也发生在 Chrome 和 FF 中,因为 onbeforeunload 事件不包含此类信息(位置 X 和 Y)

我在 IE11、Chrome 48、FF 44 中测试了您的代码。

一种可能的解决方法是:

var clientX = 0;
var clientY = 0;
var scheduled = false;

window.onmousemove = function (event) {
  if (!scheduled) {
    scheduled = true;
    setTimeout(function () {
      event = event || window.event;
      clientX = event.clientX;
      clientY = event.clientY;
      scheduled = false;
    }, 1000);
  }
}

window.onbeforeunload = function (event) {
  alert(clientY+":"+clientX);
  if (clientX < 0 || clientY < 0) {
    // ajax call to server to nullify the session.
    window.close();
  }
};

【讨论】:

    【解决方案2】:

    事件对象被定义了两次:

    event = window.event || event;
    

    但这里没有使用参考:

    if(window.event.clientX < 0 || window.event.clientY < 0)
    

    所以 IE 失败了,因为代码应该是:

    if(event.clientX < 0 || event.clientY < 0)
    

    【讨论】:

    • @psyLogic gaemaf 回答了问题的 beforeUnload 部分。
    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2014-08-13
    相关资源
    最近更新 更多