clientX、clientY javascript在Internet Explorer中未按预期工作
我有一个网页,当用户将鼠标移出该网页时,它会显示一条消息。除Internet Explorer外,所有浏览器都能完美运行。在Internet Explorer中,我的代码可以工作,除非用户单击表单选择项。当用户从下拉列表中选择一个项目时,clientX和clientY报告一个不正确的值,这会使我的消息显示为用户将鼠标移到页面之外。只有当鼠标实际超出页面时,才会显示该消息。我已经在使用旧版IE的变通方法了。有没有人知道用不同的方法来解决这个问题,这样代码就可以在旧版IE浏览器(7-8)中正常工作 这是我的密码:clientX、clientY javascript在Internet Explorer中未按预期工作,javascript,internet-explorer,Javascript,Internet Explorer,我有一个网页,当用户将鼠标移出该网页时,它会显示一条消息。除Internet Explorer外,所有浏览器都能完美运行。在Internet Explorer中,我的代码可以工作,除非用户单击表单选择项。当用户从下拉列表中选择一个项目时,clientX和clientY报告一个不正确的值,这会使我的消息显示为用户将鼠标移到页面之外。只有当鼠标实际超出页面时,才会显示该消息。我已经在使用旧版IE的变通方法了。有没有人知道用不同的方法来解决这个问题,这样代码就可以在旧版IE浏览器(7-8)中正常工作
if (document.addEventListener) {
window.addEventListener("mouseout", popMessage, false);
} else { // IE before version 9
document.attachEvent ('onmouseout', popMessage);
}
.
.
.
.
var mouseX = 0;
var mouseY = 0;
function popMessage (e) {
mouseX = e.pageX;
mouseY = e.pageY;
if ('pageX' in e) { // all browsers except IE before version 9
var mouseX = e.pageX - document.documentElement.scrollLeft;
var mouseY = e.pageY - document.documentElement.scrollTop;
}
else { // IE before version 9
mouseX = e.clientX + document.documentElement.scrollLeft;
mouseY = e.clientY + document.documentElement.scrollTop;
}
if ((mouseY < 0 || mouseY > window.innerHeight-1)
|| (mouseX < 0 || mouseX > window.innerWidth-1))
{
abandonPanel.show();
// alert("x:" + mouseX + " y:" + mouseY + " innerHeight:" + window.innerHeight + " innerWidth:" + window.innerWidth);
if (document.addEventListener) {
window.removeEventListener("mouseout", popMessage, false);
} else { // IE before version 9
document.detachEvent ('onmouseout', popMessage);
}
}
}
if(document.addEventListener){
window.addEventListener(“mouseout”,popMessage,false);
}else{//IE在版本9之前
document.attachEvent('onmouseout',popMessage);
}
.
.
.
.
var-mouseX=0;
var-mouseY=0;
函数popMessage(e){
mouseX=e.pageX;
mouseY=e.pageY;
如果('pageX'在e中){//除IE版本9之前的所有浏览器
var mouseX=e.pageX-document.documentElement.scrollLeft;
var mouseY=e.pageY-document.documentElement.scrollTop;
}
else{//IE在版本9之前
mouseX=e.clientX+document.documentElement.scrollLeft;
mouseY=e.clientY+document.documentElement.scrollTop;
}
如果((鼠标<0 | |鼠标>窗口内部高度-1)
||(mouseX<0 | | mouseX>window.innerWidth-1)
{
show();
//警报(“x:+mouseX+”y:+mouseY+”innerHeight:“+window.innerHeight+”innerWidth:“+window.innerWidth”);
if(文件增补列表器){
removeEventListener(“mouseout”,popMessage,false);
}else{//IE在版本9之前
document.detachEvent('onmouseout',popMessage);
}
}
}
e.clientX仅在事件的目标(src元素)是文档时与e.pageX类似
在表和定位元素以及表单元素中,需要考虑包含元素的偏移-
var node=event.srcELement, mouseX=node.offsetLeft+event.clientX;
while(node.offsetParent){
node=node.offsetParent;
mouseX+=node.offsetLeft;
}
还有老鼠
在src元素成为主体之前,忽略mousemove会更简单。附加代码如下
else { // IE before version 9
if (e.srcElement.nodeName!="SELECT") { // IE reports inaccurate mouse information on SELECT elements
mouseX = e.clientX + document.documentElement.scrollLeft;
mouseY = e.clientY + document.documentElement.scrollTop;
}
else {
mouseX = 50
mouseY = 50
}
}
如果用户将鼠标放在一个select元素上以防止javascript失火,则输入伪值。消息:“offsetLeft”为空或不是objectCheck,如果您处于quirks或standard模式。