JQuery偏移问题

时间:2011-06-02 22:52:31

标签: jquery position positioning offset

我有一个ajax脚本,可以在我的页面上加载列表项。根据用户点击的标签,将打开不同的列表。列表项是唯一的。但我的if子句会计算出我在哪个列表中计算弹出窗口的偏移量。

            if(varType == 'search')
            {
                p = $('.dv_variable_' + subjectId + '_' + varNumber + '_' + varSequence + '_search').offset();
                //p.top = $('.dv_variable_' + subjectId + '_' + varNumber + '_' + varSequence + '_search').offset().top - $(window).scrollTop();
                //p.left = $('.dv_variable_' + subjectId + '_' + varNumber + '_' + varSequence + '_search').offset().left(); 

            }
            else if(varType == 'fuv')
            {
                p = $('.dv_variable_' + subjectId + '_' + varNumber + '_' + varSequence + '_fuv').offset();
            }

如果偏移量为0,0,则执行此操作:

    while(p.top == 0 || p.left == 0)
    {
        if(varType == 'search')
        {
            p = $('.dv_variable_' + subjectId + '_' + varNumber + '_' + varSequence + '_search').offset();
        }
        else if(varType == 'fuv')
        {
            p = $('.dv_variable_' + subjectId + '_' + varNumber + '_' + varSequence + '_fuv').offset();
        }
 }

现在如果我在上面的ifs和while循环之间发出警报(p.left +"" + p.top),则计算偏移量,否则没有警报我总是得到0,0

1 个答案:

答案 0 :(得分:1)

这可能是一个heisenbug,也发布在这里:Why would jquery return 0 for an offsetHeight when firebug says it's 34?

在您设置DOM或执行某些显示/隐藏(可能未显示?)之后,DOM可能没有时间更新。警报通过引入一个小延迟来解决这个问题,足以让DOM更新。