javascript - 位置函数返回0

时间:2011-02-28 12:58:56

标签: javascript

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的位置错误时正确计算鼠标位置的原因... ?

enter image description here

更新已解决:似乎我确实需要 targCompObject.offsetLeft,targCompObject.offsetTop, 取而代之的是那些上下左右功能。

其中

targCompObject = document.getElementById(targComp);

所以最后的电话是:

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

1 个答案:

答案 0 :(得分:1)

您传递的是目标元素的 id ,而不是元素本身。

你需要弹出处理程序中的某个地方

targComp = document.getElementById(targComp);

你可以先检查它是否是一个字符串,这样你也可以选择用DOM元素引用来调用它。