Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery:为什么元素的相对位置有时返回窗口顶部(0,0),而在其他位置返回正确?_Javascript_Jquery - Fatal编程技术网

Javascript JQuery:为什么元素的相对位置有时返回窗口顶部(0,0),而在其他位置返回正确?

Javascript JQuery:为什么元素的相对位置有时返回窗口顶部(0,0),而在其他位置返回正确?,javascript,jquery,Javascript,Jquery,我试图在ajax调用点(即,event.target或触发事件的对象)显示一个忙等待图标。我使用以下代码来实现这一点,但在某些情况下,返回元素的位置(偏移量)是top:0和left:0——我知道我可能犯了错误,但似乎无法确定。以下是我的代码(它位于主干视图类中,但这并不重要,因为它非常简单): 这对于某些元素很有效,但对于某些元素,offset()返回0。我不知道为什么?所有这些元素都具有相对位置,并且要显示的div具有绝对位置。但我看不出冲突。(有吗?)。我需要使这个类尽可能不知道位置,可以这

我试图在ajax调用点(即,
event.target
或触发事件的对象)显示一个忙等待图标。我使用以下代码来实现这一点,但在某些情况下,返回元素的位置(偏移量)是
top:0
left:0
——我知道我可能犯了错误,但似乎无法确定。以下是我的代码(它位于主干视图类中,但这并不重要,因为它非常简单):

这对于某些元素很有效,但对于某些元素,offset()返回0。我不知道为什么?所有这些元素都具有相对位置,并且要显示的div具有绝对位置。但我看不出冲突。(有吗?)。我需要使这个类尽可能不知道位置,可以这么说

PS:我选择了本帖中指出的本地非阻塞方式:


更新:(选择答案后):Tom附加到DomeElement父级的答案是正确的。但是,要使其正常工作,最好使用
.position()
而不是上面的
.offset()
(如rkw所建议的)。上述代码附加到body(对于某些元素不正确),但使用偏移量。

position:relative的结果将取决于父元素的位置。如果您将此行为应用于不同的项目集合,则可能是因为它们的定位上下文完全不同而导致您看到的行为

你看到的问题是可重现的吗?对于相同的元素,它总是相同的吗

编辑:这是您需要将新加载指示器附加到页面的代码,位于文档中您先前获得的位置信息有意义的位置

// $('body').append(this.el);
$(DOMElement).parent().append(this.el);

绝对定位的项在第一个相对定位的父元素处找到其原点。如果定义为“无”,则它将沿着树向上移动到
主体
标记


您唯一需要定义
位置:相对
的时候是希望将该元素定义为其元素的新原点。

要针对所有浏览器进行标准化,我建议使用jQuery提供的方法:

.offset()
:如果需要相对于页面的位置,请使用此选项


.position()
:如果您想要相对于父元素的位置,请使用此选项。请注意,要使此属性起作用,父元素必须具有
位置:相对
位置:绝对
属性。

项目是否可见?我相信偏移量只对可见元素有效。@kingjiv:哦,是的,所有元素都是可见的:)有没有可能在一个简单的例子中很容易复制?也许是一个jsfiddle?@kingjiv:我已经想到了,但是我的页面相当复杂。我可以尝试简化它,但可以说我可能会解决这个问题……我有一个相当复杂的UI,但大多数项目都相对放在它们的父项中,等等。除了一些悬停菜单,我没有任何绝对定位的项目,有些项目默认为
position:static
,因为不需要相对定位。是的,对于同一组元素,问题是可重复的……这是否暗示了我遗漏了什么?@Nupul完成您想要的任务的一种更简单的方法——特别是如果所有
ajaxAble
项都是
A
标记——就是编写一个CSS类,将微调器图形定义为具有适当填充和标记的背景定位,然后让单击处理程序将该类添加到相关元素中。但是,是的,这是一组相同的元素,这表明您遇到的问题是父/子定位关系的结果。它们不都是
标记,而是一组按钮、链接、
li
等,我很难弄清楚哪个父/子在这里玩得不好。我有一种烦人的感觉,觉得附在身体上可能会有问题??附在身体上可能会有问题。您需要附加到单击元素的父元素,以使您正在提取的位置数据有意义。我会在一秒钟后发布代码…你不会相信,我确实做到了,它只适用于一个集合,而不适用于前一个集合!!我猜我只需要把所有的
ajaxAble
items的位置设置成相对的……是的。也许这就是问题所在?是不是因为我把问题附加到了主体上?如果你想让项目相对于主体定位,那没关系。如果不是,请选择正确的包含DIV。我在页面上有一堆嵌套的div。只是在我将动画附加到现有的DOM元素(本例中为body)之前,它甚至没有显示出来。我不知道这样做是否正确,因此我指出我曾尝试使用
.position()
,但出于某种原因,我得到的所有结果都是零:)保存动画的元素的css属性需要有position:relative。
$('.ajaxAble').click(function(event){

var showBusy = new LoadingAnimation({DOMElement:$(this)}); //create and render busy waiting

//do ajax calls here and call showBusy.unrender() in success/error

}
// $('body').append(this.el);
$(DOMElement).parent().append(this.el);