Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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
position top in position fixed div始终为每个元素返回相同的值jquery_Jquery_Html_Css - Fatal编程技术网

position top in position fixed div始终为每个元素返回相同的值jquery

position top in position fixed div始终为每个元素返回相同的值jquery,jquery,html,css,Jquery,Html,Css,我有一个固定的边栏,当它被打开时,它会在整个页面上浮动,边栏有一个固定的正文高度,边栏内的内容设置为overflow-y:auto;因此,当内容超过边栏高度时,它会添加一个滚动条 现在,在侧边栏中有一些字段需要在提交侧边栏表单时进行验证,因为滚动显示错误的字段可能是向上的,并且用户可能位于侧边栏的底部,因此我需要添加一个滚动条 问题是,当尝试获取元素的位置时,它总是返回相同的值,即使对于单独的字段也是如此,下面是我的代码 HTML JQuery 上面的函数就是出现问题的地方。我已经警告了Name

我有一个固定的边栏,当它被打开时,它会在整个页面上浮动,边栏有一个固定的正文高度,边栏内的内容设置为overflow-y:auto;因此,当内容超过边栏高度时,它会添加一个滚动条

现在,在侧边栏中有一些字段需要在提交侧边栏表单时进行验证,因为滚动显示错误的字段可能是向上的,并且用户可能位于侧边栏的底部,因此我需要添加一个滚动条

问题是,当尝试获取元素的位置时,它总是返回相同的值,即使对于单独的字段也是如此,下面是我的代码

HTML

JQuery

上面的函数就是出现问题的地方。我已经警告了Name和Email字段的position top,但它总是返回相同的值,即22,我不知道问题出在哪里。有什么帮助吗?

获取元素相对于其父元素的位置。改为尝试,或者,如果不可能,尝试获取父位置和/或父位置

编辑:正如其他人在评论中所说,如果没有易于测试的代码片段,很难确定,但它应该是这样的:

$('.content').position().top+
$('.sidebar-fields').position().top+
$element.closest('.sidebar-fields-block').position().top
它应该会返回一些你不能使用的东西。有很多方法可以改进它,比如循环,添加或删除一些元素,但这是我能给出的最精确的答案

在JSFiddle和一些fiddle之后编辑:给你

$('.changepicture').scrollTop($('.changepicture').scrollTop()+$element.offset().top);
使用它,您可以根据实际滚动调整您的位置。更健壮!仍然要小心多次调用函数taketotop,因为它会在用户看到滚动之前移动滚动条。例如,您可以在此处添加一个小条件:

$("#email").addClass("border-error");
if($flag)taketotop($("#email"));

如果已被名称错误触发,则taketotop不会被调用两次。

offset用于获取元素相对于主体的位置,我有一个固定的div,它与主体无关,所以我不能使用offset,而position用于获取元素相对于父元素的位置,然后需要获取元素在滚动元素中的位置,它是$element parent中的一个,但是?,哪个div是固定的?我已经添加了css以获得更多的澄清您现在可以查看@nomism我真诚的道歉我已经调整了html并提供了工作小提琴请查看!我试过了,但它不起作用,不能滚动!请提供一个适当的,其中也包括样式表。@misorude我已经更新了我的答案,请现在查看。请提供实际的客户端代码-您上面的HTML似乎仍然包含服务器端模板循环等。这里没有人提供您的服务器端设置,因此也没有人能够生成准确的输出。最好在某个地方展示一个实例,这样我们就可以检查它,而不必自己创建一个可运行的实例。我诚挚的道歉我已经调整了html并提供了工作提琴请看一看!在那把小提琴中,我得到两个显示不同位置值的警报。
$('.content').position().top+
$('.sidebar-fields').position().top+
$element.closest('.sidebar-fields-block').position().top
$('.changepicture').scrollTop($('.changepicture').scrollTop()+$element.offset().top);
$("#email").addClass("border-error");
if($flag)taketotop($("#email"));