div没有加载到正确的位置

时间:2011-01-25 21:20:52

标签: javascript jquery

如果未经身份验证的用户点击,我即尝试加载链接/按钮旁边的div。

我有以下内容:

$(function () {

    $(".unauthenticated").click(function () {
        ShowMessage($(this).attr("id"), "#unauthenticated-div")
    });

    function ShowMessage(clickedItemId, divId) {

        clickedItem = $("#" + clickedItemId);
        var pos = clickedItem.offset();
        var width = clickedItem.width();

        $(divId).css({
            "left": pos.left + width + 10,
            "top": pos.top + 10
        }).show();
    }
});

<div id="unauthenticated-div" title="Please Login" style="display: none;">
    <p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;">
    </span>You must <a href="#" id="login-link">login</a>or <a href="/Account/Register/">Register</a>to do this</p>
</div>

它显示了div,但没有显示点击的链接旁边。当我单步执行代码时,pos和width都是预期的。

3 个答案:

答案 0 :(得分:3)

您设置位置的元素是否将position属性设置为absoluterelative

如果没有,请尝试设置。

    $(divId).css({
        "left": pos.left + width + 10,
        "top": pos.top + 10,
        "position":"absolute"
    }).show();

此外,您使用HTML更新的问题未显示类"unauthenticated"的元素。

不确定这是否是问题的一部分,但click已分配给$(".unauthenticated")

答案 1 :(得分:1)

请参阅帕特里克设定绝对位置的答案。顺便说一下,在第一个参数中传递你的对象可能会更好。

$(".unauthenticated").click(function () {
    ShowMessage($(this), "#unauthenticated-div")
});

function ShowMessage(clickedItem, divId) {
    var pos = clickedItem.offset();
    var width = clickedItem.width();

    $(divId).css({
        "left": pos.left + width + 10,
        "top": pos.top + 10
    }).show();
}

答案 2 :(得分:0)

“left”和“top”只有在div是position:relative时才有意义,然后只相对于最里面的位置相对或绝对封闭div(或者如果没有则为body)。使用Firebug或IE Developer Toolbar检查...