Javascript 获取一个动态创建的验证容器以与元素一起滚动
我们动态地创建一个错误容器,将其附加到主体中,然后将其定位到错误所在的元素。这非常有效,直到用户滚动为止。错误容器保持在相同的固定位置,而元素在后台从屏幕中滚动出来。如何在滚动事件期间重新定位错误元素,使其也滚动 显示错误容器外观的屏幕截图。需要重新定位容器,并在用户滚动时滚动,以便它与它所在的元素保持一致。目前,它停留在一个固定的位置 现在,当错误处于可以滚动的位置时。请注意它是如何正确显示的 现在请注意,在滚动页面之后,错误不再停留在它所针对的元素中。我需要在滚动时使用元素的新位置正确地重新定位此元素 提前谢谢 我知道没有代码很难回答问题,但我必须小心,因为这是公司的事情 这里是我在“validation.js”库中构建容器的地方,作为我们正在使用的模板的jsViews包的一部分Javascript 获取一个动态创建的验证容器以与元素一起滚动,javascript,jquery,css,templates,Javascript,Jquery,Css,Templates,我们动态地创建一个错误容器,将其附加到主体中,然后将其定位到错误所在的元素。这非常有效,直到用户滚动为止。错误容器保持在相同的固定位置,而元素在后台从屏幕中滚动出来。如何在滚动事件期间重新定位错误元素,使其也滚动 显示错误容器外观的屏幕截图。需要重新定位容器,并在用户滚动时滚动,以便它与它所在的元素保持一致。目前,它停留在一个固定的位置 现在,当错误处于可以滚动的位置时。请注意它是如何正确显示的 现在请注意,在滚动页面之后,错误不再停留在它所针对的元素中。我需要在滚动时使用元素的新位置正确地
buildContainer: function(ev)
{
var $targetElem = $(ev.target),
leftX = $targetElem.offset().left,
topY = $targetElem.offset().top,
widthY = $targetElem.outerWidth(),
heightX = $targetElem.outerHeight();
var msg = $targetElem.closest("label").val();
var appendingContainer = null;
$targetElem.closest("label").val('');
return $('<div/>', {
html: '<ul>' + this.isValid + '</ul><span></span>',
'class': 'validation-tooltip-error',
css: {
top: topY - heightX,
left: leftX + widthY - 20
}
}).appendTo("body");
}
希望这能有所帮助。也许您可以将错误附加到它所指向的输入/标签附近?我通常有这样的东西
<div class = "input-row">
<label>Label</label>
<input type = "text" />
<span class = "error">Error</span>
</div>
标签
错误
然后我可以将错误标签设置为绝对位置,将输入行设置为相对位置。您能与我们共享您的HTML和CSS吗?我认为这是css中的定位问题。没有css无法确定,但我猜错误容器是绝对定位的,而不是固定的?@drip我想你的意思是他的容器设置为fixed@jj689不,我的意思是,现在它是绝对的,如果它是固定的,它会和内容一起滚动,但从图片中我看到情况并非如此……因此它可能被设置为绝对值。正在发生的一个问题是,我使用“body”标记进行附加。如果我可以使用元素所在的容器,在本例中为“editQuestionArea”,那么它会随之滚动。问题是查找这些容器中存在的位置,因为这些容器都是可滚动的。这是正常的、好的解决方案。我想,我应该这样写。我不想在html中把验证元素塞进它们所需的元素旁边,因为这会提升布局。可见与否。我会走这条路,我想,并更新它是怎么走的。谢谢。如果您关心其他元素,也许可以使用标签或输入的:before或:after元素。css将几乎与您在那里遇到的错误范围相同。但是如果错误信息必须是动态的,这就不起作用了。你知道吗,这引发了一个想法。这是基于你的答案,所以非常感谢这里的每一位帮助过我的人。我把你的两个想法混合在一起。谢谢当我试图附加错误容器时,它的行为不正确。因此,我将错误容器的css从“position:absolute”删除为“relative”,然后使用“insertAfter”,效果很好。再次感谢!
<div class = "input-row">
<label>Label</label>
<input type = "text" />
<span class = "error">Error</span>
</div>