如何防止在update = @ form上重新定位滚动条?

时间:2014-01-22 10:12:46

标签: jsf primefaces

我的表格很长,客户端必须垂直滚动屏幕以查看所有字段。

但是,每次触发具有属性update=@form的其中一个组件时,屏幕都会返回到顶部位置。

所以,问题是:

  • 有一种方法可以在update=@form之后将滚动条保持在同一位置?

重要:滚动条仅在第一个update=@form中回到顶部,之后屏幕保持当前位置。

我不确定这是一个错误,还是我做错了导致这种行为。

是的,我真的需要更新整个表格

e.g。

<p:commandButton id="btnVerifyLogin" update="@form" value="Verify" 
    actionListener="#{demandController.VerifyLogin()} />

1 个答案:

答案 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,最近我避免更新完整表格,我更喜欢使用选择器。

希望这有帮助。