2012-04-12 71 views
0

我有一个网页,当用户将鼠标移出页面时会显示一条消息。除Internet Explorer之外,所有浏览器中的所有内容都可以完美运行在Internet Explorer中,我的代码可以工作,除非用户单击表单选择项。当用户从下拉列表中选择一个项目时,clientX和clientY报告的值不正确,这会使我的消息显示为用户将其鼠标移动到页面外部。该消息应该只在鼠标实际走出页面时显示。我已经在使用旧版IE浏览器的工作。有没有人知道解决这个问题的不同方式,以便代码在旧版IE浏览器中正常工作(7-8)?clientX,clientY javascript在Internet Explorer中无法正常工作

这里是我的代码:

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); 
     } 
    } 
} 
+0

检查您是否处于怪癖或标准模式。 – 2012-10-24 16:42:08

回答

0

e.clientX只能像e.pageX当事件的目标(srcElement)是文档。

在表和定位的元素以及元素形式的含元素的偏移量需要在考虑之列

var node=event.srcELement, mouseX=node.offsetLeft+event.clientX; 
while(node.offsetParent){ 
    node=node.offsetParent; 
    mouseX+=node.offsetLeft; 
} 

,也为mouseY的。

直到srcElement是body,忽略mousemove才会更简单。

+0

消息:'offsetLeft'为空或不是对象 – rooter 2012-04-23 12:57:07

1

所附代码如下

 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 
     } 

    } 

此进入虚拟值如果用户具有鼠标在其保持的JavaScript从失火一个选择元件。

相关问题