¿Cómo puedo ejecutar Javascript antes de realizar una acción JSF <h:commandLink>?[duplicar]

StackOverflow https://stackoverflow.com/questions/73628

  •  09-06-2019
  •  | 
  •  

Pregunta

Esta pregunta ya tiene respuesta aquí:

Si tienes un JSF <h:commandLink> (que utiliza el onclick evento de un <a> para enviar el formulario actual), ¿cómo se ejecuta JavaScript (como solicitar confirmación de eliminación) antes de realizar la acción?

¿Fue útil?

Solución 2

<h:commandLink id="myCommandLink" action="#{myPageCode.doDelete}">
    <h:outputText value="#{msgs.deleteText}" />
</h:commandLink>
<script type="text/javascript">
if (document.getElementById) {
    var commandLink = document.getElementById('<c:out value="${myPageCode.myCommandLinkClientId}" />');
    if (commandLink && commandLink.onclick) {
        var commandLinkOnclick = commandLink.onclick;
        commandLink.onclick = function() {
            var result = confirm('Do you really want to <c:out value="${msgs.deleteText}" />?');
            if (result) {
                return commandLinkOnclick();
            }
            return false;
        }
    }
}
</script>

Otras acciones de Javascript (como validar la entrada del formulario, etc.) se podrían realizar reemplazando la llamada a confirm() con una llamada a otra función.

Otros consejos

Se puede simplificar así

onclick="return confirm('Are you sure?');"

Esto funcionó para mí:

<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"  
                                             id="newibutton" 
                                             onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;" 
                                             value="#{bundle.NewPatient}"/>

Todavía puedes usar onclick.El JSF especificación del kit de renderizado (consulte Comportamiento de codificación) describe cómo debe manejarlo el enlace.Aquí está la parte importante (lo que representa al hacer clic):

var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();

Por lo tanto, a su función no se le pasará el objeto de evento (que de todos modos no es confiable entre navegadores), pero devolver verdadero/falso provocará un cortocircuito en el envío.

En JSF 1.2 puede especificar eventos onclick.

Además, otras bibliotecas como Mis caras o caras de hielo implementar el controlador "onclick".

Lo que tendrías que hacer entonces es simplemente:

<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />

Nota:no puedes simplemente hacer return confirm(...) ya que esto bloqueará el resto del JavaScript en el evento onClick, lo que efectivamente evitará que su acción ocurra sin importar lo que el usuario devuelva.

Si desea ejecutar algo antes de que se publique el formulario, para confirmarlo, por ejemplo, pruebe el evento de formulario onSubmit.Algo como:

myform.onsubmit = function(){confirm("really really sure?")};

Esto nunca funcionó para mí,

 onclick="if(confirm('Are you sure?')) return false;" />

pero esto lo hizo

onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
var deleteClick;
var mess="xxx";
function assignDeleteClick(link) {
    if (link.onclick == confirmDelete) {
        return;
    }
    deleteClick = link.onclick;
    link.onclick = confirmDelete;
}


function confirmDelete() {
    var ans = confirm(mess);
    if (ans == true) {
        return deleteClick();
    } else {
        return false;
    }
} 

use este código para jsf 1.1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top