2012-04-12 118 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從失火一個選擇元件。

相關問題