鼠标事件属性在 IE 11 上未定义
Mouse Event Properties are Undefined on IE 11
我使用以下代码来识别浏览器 window 关闭事件并按预期在其他浏览器上工作,但在 IE11 上不起作用。由于这行代码仅在 IE11 alert(event.clientY+":"+event.clientX);
上给我 undefined
。任何人都可以提出解决此问题的建议。
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();
}
};
事件对象定义了两次:
event = window.event || event;
但这里没有引用:
if(window.event.clientX < 0 || window.event.clientY < 0)
所以 IE 失败,因为代码应该是:
if(event.clientX < 0 || event.clientY < 0)
从 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();
}
};
我使用以下代码来识别浏览器 window 关闭事件并按预期在其他浏览器上工作,但在 IE11 上不起作用。由于这行代码仅在 IE11 alert(event.clientY+":"+event.clientX);
上给我 undefined
。任何人都可以提出解决此问题的建议。
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();
}
};
事件对象定义了两次:
event = window.event || event;
但这里没有引用:
if(window.event.clientX < 0 || window.event.clientY < 0)
所以 IE 失败,因为代码应该是:
if(event.clientX < 0 || event.clientY < 0)
从 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();
}
};