我的表格很长,客户端必须垂直滚动屏幕以查看所有字段。
但是,每次触发具有属性update=@form
的其中一个组件时,屏幕都会返回到顶部位置。
所以,问题是:
update=@form
之后将滚动条保持在同一位置? 重要:滚动条仅在第一个update=@form
中回到顶部,之后屏幕保持当前位置。
我不确定这是一个错误,还是我做错了导致这种行为。
是的,我真的需要更新整个表格
e.g。
<p:commandButton id="btnVerifyLogin" update="@form" value="Verify"
actionListener="#{demandController.VerifyLogin()} />
答案 0 :(得分:1)
之前我遇到过这个问题,我必须更新整个表格。
我了解到,当我更新包含已按下按钮的表单(如“验证”按钮)时,浏览器会以某种方式失去对该按钮的关注,只需滚动回到顶部。
我想出了一个解决方法。
<p:commandButton id="btnVerifyLogin"
update="@(form :not(#formId\\:btnVerifyLogin))"
value="Verify"
actionListener="#{demandController.VerifyLogin()} />
基本上我更新了表单而不是按钮,这样浏览器就可以保持滚动。
其他人会建议onstart
我们可以调用var scroll = $(window).scrollTop();
来保留我们的滚动位置,oncomplete
我们会调用$("html").scrollTop(scroll);
,但这不会有效由于按钮在表单内更新,因此不会触发oncomplete
!
同样这只适用于Primefaces 4,最近我避免更新完整表格,我更喜欢使用选择器。
希望这有帮助。