2011-06-26 24 views
14

Mi código:¿Cómo evitar repetidamente hacer clic en un botón en un formulario?

<h:form id="newBSTypePanel" > 
    <h:panelGrid columns="2" id="newRecod" > 
     <h:outputText value="Name"/><h:inputText value="#{treeTableController.newBStypeBean.currentObject.TYPENAME.value}" required="true" /> 
     <p:commandButton value="save" action="#{treeTableController.saveNewNodes}" oncomplete="Dlg.hide()" update="productDataForm"/> 
     <p:commandButton value="close" oncomplete="Dlg.hide()" /> 
    </h:panelGrid> 
</h:form> 

Hay un poco de funcionalidad asociada con la acción de guardar. Si hago clic repetidamente en el botón, puede guardar algunos registros en la base de datos. Ese no es mi deseo. ¿Cómo puedo evitar clics múltiples y resolver esto?

Respuesta

33

El <p:commandButton> 's API lado del cliente Widget:

  • PrimeFaces.widget.CommandButton

  • Método Parámetros Tipo Descripción de vuelta

  • disable() - vacío Desactivar botón s
  • enable() - botón vacío Permite

lo que sólo puede utilizar la siguiente manera:

<p:commandButton widgetVar="saveButton" 
       onclick="saveButton.disable()" 
       value="save" 
       action="#{treeTableController.saveNewNodes}" 
       oncomplete="saveButton.enable();Dlg.hide()" 
       update="productDataForm"/> 
+0

Sí, ¡realmente funciona! ¡Gracias! Antes de conocer su respuesta, agrego algo como esto ** \t \t \t \t

\t \t \t ** creo que estos códigos pueden utilizar la función de ajax, que anexe con ** p: commandButton ** – leo173

+0

No, en all.Yeah, su conjetura es muy convincente .hehe – FishGel

+10

Para versiones más nuevas de Primefaces (perdió unos minutos para eso): ' esmin

3

el uso de JavaScript y el temporizador

<script> 

function disableClick(){ 
    document.getElementById('saveButton').disables = true; 
    setTimeout('document.getElementById(\'saveButton\').disables = false', 5000)" 
} 
</script> 


<h:form id="newBSTypePanel" > 
    <h:panelGrid columns="2" id="newRecod" > 
     <h:outputText value="Name"/><h:inputText value="#{treeTableController.newBStypeBean.currentObject.TYPENAME.value}" required="true" /> 
     <p:commandButton value="save" action="#{treeTableController.saveNewNodes}" oncomplete="Dlg.hide()" onclick="disableClick()" id="saveButton" update="productDataForm"/> 
     <p:commandButton value="close" oncomplete="Dlg.hide()" /> 
    </h:panelGrid> 
</h:form> 
+0

Gracias por tu respuesta! Creo que la respuesta de @RichardDing es mejor para mí. – leo173

5

Para las versiones más recientes de PrimeFaces, la solución sería:

<p:commandButton widgetVar="saveButton" 
       onclick="PF('saveButton').disable()" 
       value="save" 
       action="#{treeTableController.saveNewNodes}" 
       oncomplete="PF('saveButton').enable();PF('Dlg').hide()" 
       update="productDataForm"/> 
Cuestiones relacionadas