如何防止用户单击按钮两次(如果指定了 onclick 属性,则 JSF 命令按钮不执行操作)


  <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。我的意思是它正在禁用按钮但不执行所需的操作。

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

可以帮帮我。

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

<h:commandButton styleClass="button"  id="button_check" 
   onclick="setTimeout('document.getElementById('' + this.id + '').disabled=true;', 50);" 
   action="#{pc_AMyBean.doCheckAction}" value="CHECK NOW"/> 

JSF 1.2 刚遇到类似的情况。

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

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

这对我们有用,表单帖子只发生过一次。

最新更新