【问题标题】:How to prevent scrollbar re-positioning on update=@form?如何防止滚动条在 update=@form 上重新定位?
【发布时间】:2014-01-22 10:12:46
【问题描述】:

我的表单很长,客户端必须垂直滚动屏幕才能看到所有字段。

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

所以,问题是:

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

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

我不确定是错误还是我做错了什么导致了这种行为。

是的,我真的要更新整个表单

例如

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

【问题讨论】:

  • 这个post 可能会有所帮助...

标签: jsf primefaces


【解决方案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,最近我避免更新完整的表单,我更喜欢使用选择器。

希望这会有所帮助。

【讨论】:

  • 谢谢哈特姆!您的回复没有按预期工作,但它使我找到了解决方案。我要做的是排除父文档的更新,这是“窃取”焦点。这个问题也帮助了我:stackoverflow.com/questions/15790160/…
  • 也许我的测试页面层次结构完全不同..这就是我的伎俩奏效的原因:) @Pellizon
猜你喜欢
  • 2010-11-27
  • 2013-07-08
  • 2016-05-02
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多