JQuery 偏移问题

发布于 2024-11-11 16:10:01 字数 1242 浏览 2 评论 0原文

我有一个 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。

I have an ajax script that loads list items on my page. Depending what tab the user clicks on, different lists will open. The list items are unique. But my if clause figures out what list I'm in then calculates the offset for a popup window.

            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();
            }

And then I do this if the offset is 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();
        }
 }

Now if I do alert(p.left+" "+p.top) between the ifs above and the while loop, the offset is calculated, otherwise without the alert I always get 0,0.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

唐婉 2024-11-18 16:10:01

这可能是一个 heisenbug,也发布在这里: 为什么当 firebug 说 offsetHeight 是 34 时,jquery 会返回 0?

在你设置它或执行一些操作后,DOM 可能没有时间更新显示/隐藏(也许没有显示?)。该警报通过引入足以更新 DOM 的小延迟来解决此问题。

This is likely a heisenbug, as also posted here: Why would jquery return 0 for an offsetHeight when firebug says it's 34?

The DOM likely hasn't had time to update after you set it or do some showing/hiding (perhaps not shown?). The alert solves this issue by introducing a small delay, enough for the DOM to update.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文