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是錯的...?
更新解決:看來,我確實需要targCompObject.offsetLeft,targCompObject.offsetTop, 代替calliny的那些頂部和左側的功能。
其中
targCompObject = document.getElementById(targComp);
所以最後通話:
Ice.Menu.showIt(targCompObject.offsetLeft, targCompObject.offsetTop,
popupMenu, targComp);
你確定'targComp'是你的div的有效引用嗎?可能你沒有傳入有效的DOM元素作爲參數 – davin 2011-02-28 13:14:16
剛剛添加了html代碼來證明... – 2011-02-28 13:22:35
@Christian什麼是'frmMainMenu:menuPopupAP_sub'相對於'frmMainMenu:divMenuPopupAP'?我認爲您不需要將這些ID值硬編碼到onmouseover屬性中。 – 2011-02-28 13:34:15