function getposition(obj) {
var r = new Array();
r['x'] = obj.offsetLeft;
r['y'] = obj.offsetTop;
while (obj = obj.offsetParent) {
r['x'] += obj.offsetLeft;
r['y'] += obj.offsetTop;
}
return r;
}这个方法我试过了,有bug 如果在input 的外面再加一层div,并且input的所在的范围超出了div div设置了滚动条,所算的的坐标就会出现偏差

解决方案 »

  1.   

    var x = document.getElementById("txtCity");
                            var t = 0; while (x) { t += x.offsetTop; x = x.offsetParent; }
                            var l = 0; while (x) { l += x.offsetLeft; x = x.offsetParent; }
      

  2.   

    如果出现滚动条那就要减去相应的滚动量!L@_@K
    function getposition(obj) {
        var r = new Array();
        r['x'] = obj.offsetLeft;
        r['y'] = obj.offsetTop;
        while (obj = obj.offsetParent) {
            r['x'] += obj.offsetLeft;
            if (obj.scrollLeft) {
                r['x'] -= obj.scrollLeft;
            }        r['y'] += obj.offsetTop;
            if (obj.scrollTop) {
                r['y'] -= obj.scrollTop;
            }
        }
        return r;
    }
      

  3.   

    三楼的代码很像  但是好像不对function getposition(obj) {
    var r = new Array();
        var e=obj,E=e;
        var x=e.offsetLeft;
        var y=e.offsetTop;
        while (e=e.offsetParent) {
            var P=e.parentNode;
            while (P!=(E=E.parentNode)) {
                x-=E.scrollLeft;
                y-=E.scrollTop;
            }
            x+=e.offsetLeft;
            y+=e.offsetTop;
            E=e;
        }
        r['x'] = x;
    r['y'] = y;
        return r;
    }这是我找到的,分享一下