Icefaces有一种定位弹出窗口的方法,点击鼠标。我禁用了鼠标单击坐标的代码部分,因为我想把这个menuPopup放在我的targComp(实际上是div)所在的位置(所以固定位置iso鼠标位置)。
调用的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中的点击但是div的位置错误时正确计算鼠标位置的原因... ?
更新已解决:似乎我确实需要 targCompObject.offsetLeft,targCompObject.offsetTop, 取而代之的是那些上下左右功能。
其中
targCompObject = document.getElementById(targComp);
所以最后的电话是:
Ice.Menu.showIt(targCompObject.offsetLeft, targCompObject.offsetTop,
popupMenu, targComp);
答案 0 :(得分:1)
您传递的是目标元素的 id ,而不是元素本身。
你需要弹出处理程序中的某个地方
targComp = document.getElementById(targComp);
你可以先检查它是否是一个字符串,这样你也可以选择用DOM元素引用来调用它。