0
  <h:commandButton styleClass="button"  id="button_check" onclick="this.disabled=true;this.value='Please wait...';" action="#{pc_AMyBean.doCheckAction}" value="CHECK NOW"/> 

此命令按钮执行 onclick 事件,但不调用操作。它是 JSF 1.2。我的意思是它正在禁用按钮但没有执行所需的操作。

如何防止用户提交表单两次?如果是订单,将提出两个订单。

可以请帮助我。

4

2 回答 2

0

我可能是因为您在调用操作之前禁用了该按钮。尝试setTimeout()像这样 使用

<h:commandButton styleClass="button"  id="button_check" 
   onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);" 
   action="#{pc_AMyBean.doCheckAction}" value="CHECK NOW"/> 
于 2012-10-11T14:56:36.513 回答
0

刚刚在 JSF 1.2 中遇到了类似的情况。

我们添加了一个小的 javascript IIFE 来禁用该按钮,但仅在第二次单击之后。这样第一次提交就不会因为被禁用而被取消。setTimeout() 解决方案的问题是它仍然允许在禁用按钮之前双击。您可以通过在 javascript 中编写一个由 JSF onclick 调用的函数,以更 JSF 的方式执行此操作。但我们更喜欢将所有代码放在一个地方。

(function($) {
    var clickCounter = 0;
    $('#button_check').on('click', function() {
        if (clickCounter > 0) {
           $(this).attr('disabled', true);
        }
        clickCounter += 1;
    }
})(jQuery);

这对我们有用,表单发布只出现一次。

于 2017-06-27T13:20:45.543 回答