【问题标题】:Disable `<h:commandButton>` after clicked, but action should be fired单击后禁用`<h:commandButton>`,但应触发操作
【发布时间】:2012-10-18 11:42:27
【问题描述】:

我的 XHTML 页面中有一个&lt;h:commandButton&gt;。我希望在单击按钮后立即禁用该按钮。然后按钮应该调用动作。我的按钮按我的预期被禁用,但问题是该操作没有被触发。
&lt;h:commandButton value="Go" onclick="this.disabled=true" action="#{bean.go()}"/&gt;

但如果我删除 onclick 属性,则会触发操作。

或者,如果我使用&lt;a4j:commandButton&gt;,它可以工作。
以下 a4j 按钮有效。
&lt;a4j:commandButton value="Go" onclick="this.disabled=true" action="#{bean.go()}"/&gt;

如何在点击后禁用&lt;h:commandButton&gt;,以便该操作仍然触发?

【问题讨论】:

  • 检查这个堆栈答案stackoverflow.com/a/2594864/1358004
  • @ViralShah :我希望该按钮在单击一次后被禁用。您的解决方案是否仍然适用?你是说onclick="this.disabled = 'disable'"?它也不起作用。 :(
  • 为什么不设置一些任意值作为false 当按钮被点击?但在设置值之前,您应该先检查该值是否为true,然后再继续。这样一来,它可能看起来不会被禁用,但在技术上会被禁用。
  • @ianpgall:好主意。问题是按钮看起来仍然启用。
  • 如果你使用&lt;a4j:commandButton&gt;,你可以使用oncomplete在动作执行后执行的javascript方法:&lt;a4j:commandButton value="Go" onclick="this.disabled=true" action="#{bean.go()}" oncomplete="this.disabled=true" /&gt;

标签: javascript jsf ajax4jsf


【解决方案1】:

使用 setTimeout ,这样动作就会被触发并且按钮会被禁用...

<h:commandButton value="Go"
   onclick="setTimeout('this.disabled = true;', 50);" 
   action="#{bean.go()}"/>

你也可以看看下面的问题:How can I disable an h:commandButton without preventing the action and actionListener from being called?

【讨论】:

  • 好主意。它可以被称为“黑客”吗?效果很好。我用它作为setTimeout('this.disabled = true', 50);。谢谢。
  • 不客气,我想是的...对我来说也像 hack/workaround...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 2014-12-25
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多