jQuery .offset(position)无法正常工作

时间:2011-09-29 15:55:55

标签: jquery positioning

好的,继续我的冒险这个页面。现在我在我的页面中有这个(现在有些东西是占位符):

$(document).ready(function() {
    $(":input")
        .focus(function() {
            var localOffset = 20;
            var hint = $(this).attr("name");     // this is the placeholder part
            if(hint !== undefined)
            {
                $('#form_entry_hint').html(hint);
                var pos = $(this).offset();
                // I added rounding because it didn't work - but still not working
                pos.left = Math.round(pos.left + $(this).width() + localOffset);
                pos.top = Math.round(pos.top - 3);
                // the following alert is for debugging - it shows the correct values
                alert("top: " + pos.top + "; left: " + pos.left);
                $('#form_entry_hint').offset(pos);    // this is the line that doesn't always work
                $('#form_entry_hint').show();
            }
        })
        .blur(function() {
            $('#form_entry_hint').hide();
        });
});

这在第一个focus上完全正常。但是在随后的执行中,#form_entry_hint正在向下和向右放置。虽然调试显示正确的值(286,418),但当它放在.offset(pos)时,它最终会在(1199,1692) - 或者那里附近的某个地方,每次这些数字都不同 - 但总是出路的地方。

这次我错过了什么? :)

1 个答案:

答案 0 :(得分:9)

我通过替换$('#form_entry_hint').offset(pos);

获得更一致的结果

使用:

$('#form_entry_hint').css({ top: pos.top+'px', left: pos.left+'px' });

如果你还没有,你需要将#form_entry_hint设置为绝对(或相对)。

编辑:感谢Kato的简化。