0

我正在对一个相当简单的表单进行故障排除,该表单带有一个带有五个选项的复选框,每个选项对应于一组字段,这些字段根据是否选中该框而隐藏或显示。相当简单。

该复选框在 onClick 事件中有代码,用于设置 viewScope 变量并部分刷新包含所有字段组的面板。每个字段组都在一个面板内,如果 viewScope 变量为真,则该面板会呈现。

但是,如果我快速选择三个选项,我会发现第一个选项之后的点击并不总是被拾取,只有第一个面板显示。我假设这是因为 onClick 事件只运行一次,如果它已经运行就不会重新运行,对吧?

任何人都可以提出一种更具响应性的方式来做到这一点吗?单个复选框?客户端JS代替?

4

2 回答 2

1

完全同意斯文。服务器端刷新/部分刷新的性质也一度让我大吃一惊。

如果必须以这种方式完成,我最终的目标是通过 CSJS 将复选框(我实际上是在使用单选组)中的更新触发到容器字段,该字段的 css display 属性设置为 none . 这个字段是我绑定到 viewScope 变量的。隐藏容器字段使用 onBlur CSJS 事件进行更新。

要刷新 viewScope 的 var 以供显示使用,它确实需要至少部分刷新;为此,我只是假设人们知道当他们保存表单时,它将加载最新的计算信息。

于 2012-10-04T12:57:06.157 回答
1

部分刷新有延迟。延迟大约为 20 秒或直到最后一次部分刷新完成。可以在 xsp.properties 文件中使用参数xsp.partial.update.timeout=[seconds]配置确切的延迟

可以在 CSJS 中使用XSP.submitLatency查询当前延迟。您可以通过在客户端中调用XSP.allowSubmit()来重置此延迟,然后允许同时“多次”刷新。

但在进行这些杂技动作之前,您应该三思而后行:用户界面是否需要在单击复选框后自动运行刷新?为什么不提供一个简单的“刷新”按钮让您的用户手动执行此操作?或者你可以添加一个加载覆盖来通知用户“现在正在发生一些事情”——这个覆盖可以防止多次点击,如果用户点击太快就不再是问题了。

于 2012-10-04T07:03:17.807 回答