<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);
这对我们有用,表单帖子只发生过一次。