2011-02-28 55 views
1

Icefaces有一個定位彈出窗口的方法,您在哪裏點擊鼠標。我禁用了鼠標單擊座標所在的代碼部分,因爲我想將此菜單選項放在我的targComp(實際上是div)所在的位置(因此固定位置爲iso鼠標位置)。javascript - 位置函數返回0

調用的JavaScript方法是:

function contextMenuPopup(event, popupMenu, targComp) { 
var dynamic = $(popupMenu + "_dynamic"); 
if (!event) { 
    event = window.event; 
} 
if (event) { 
    event.returnValue = false; 
    event.cancelBubble = true; 

    if (event.stopPropagation) { 
     event.stopPropagation(); 
    } 

    var posx = 0; // Mouse position relative to 
    var posy = 0; // the document 
    /* 
    * if (event.pageX || event.pageY) { posx = event.pageX; posy = 
    * event.pageY; } else if (event.clientX || event.clientY) { posx = 
    * event.clientX + document.body.scrollLeft + 
    * document.documentElement.scrollLeft; posy = event.clientY + 
    * document.body.scrollTop + document.documentElement.scrollTop; } 
    */ 
    alert(Left(targComp)); 
    Ice.Menu.showIt(posX, posY, popupMenu, targComp); 
} 
} 

你看,我只評論舊代碼,並添加一個警報,以找出是否我的方法,返回的targComp的位置是否正確計算值。

function Left(el) { 
var _x = 0; 
while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { 
    _x += el.offsetLeft - el.scrollLeft; 
    el = el.parentNode; 
} 
return _x; 
} 

function Top(el) { 
    var _y = 0; 
    while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { 
     _y += el.offsetTop - el.scrollTop; 
     el = el.parentNode; 
    } 
    return _y; 
} 

我不明白爲什麼我的警報返回0時,我肯定知道我targComp DIV是不是留下座標......

你看不出什麼問題? (是的,我知道我必須在showIt方法中替換posX和posY,但是在確定Left和Top是正確的之後,我會這樣做的(順便說一下,從here複製過來,所以已經確認這些方法是做工精細...)

那麼它就是問題所在

HTML代碼:

<div class="icePnlGrp graMainMenuTabDefault" id="frmMainMenu:divMenuPopupAP" onmouseover="contextMenuPopup(event, 'frmMainMenu:menuPopupAP_sub', 'frmMainMenu:divMenuPopupAPSmall');return false;"> 
    <label class="iceOutLbl graMainMenuTabText" id="frmMainMenu:j_id54">Application Portfolio</label> 
    <div class="icePnlGrp" id="frmMainMenu:divMenuPopupAPSmall" style="border-style:solid; border-width:1px;"> 
</div> 
</div> 

更新(解決上述問題後):我附上截圖不知道爲什麼鼠標位置正確計算時,我按下該targetComp div中的點擊但th的位置e div是錯的...?

enter image description here

更新解決:看來,我確實需要targCompObject.offsetLeft,targCompObject.offsetTop, 代替calliny的那些頂部和左側的功能。

其中

targCompObject = document.getElementById(targComp); 

所以最後通話:

Ice.Menu.showIt(targCompObject.offsetLeft, targCompObject.offsetTop, 
      popupMenu, targComp); 
+0

你確定'targComp'是你的div的有效引用嗎?可能你沒有傳入有效的DOM元素作爲參數 – davin 2011-02-28 13:14:16

+0

剛剛添加了html代碼來證明... – 2011-02-28 13:22:35

+1

@Christian什麼是'frmMainMenu:menuPopupAP_sub'相對於'frmMainMenu:divMenuPopupAP'?我認爲您不需要將這些ID值硬編碼到onmouseover屬性中。 – 2011-02-28 13:34:15

回答

1

你傳遞的目標元素,而不是元素本身的ID

某處,在彈出的處理程序,你需要

targComp = document.getElementById(targComp); 

你可以把它先檢查,看看它是否是一個字符串,這樣你可以任選一個DOM元素引用調用它。

+0

呃...非常感謝........ – 2011-02-28 13:30:17

+0

你能否也請看看我的更新? – 2011-02-28 14:05:41

+0

好吧,你寫信,現在解決了 - 所以一切都好? – Pointy 2011-02-28 14:24:00