referencia - que se puede hacer con javascript
¿Cómo puedo ejecutar Javascript antes de realizar una acción JSF<h: commandLink>? (8)
Esta pregunta ya tiene una respuesta aquí:
- Confirmación al enviar 1 respuesta
Si tiene un JSF <h:commandLink>
(que utiliza el evento onclick
de un <a>
para enviar el formulario actual), ¿cómo ejecuta JavaScript (como solicitar confirmación de eliminación) antes de realizar la acción?
Aún puedes usar onclick. La especificación del kit de renderizado JSF (ver Comportamiento del código) describe cómo debe manejarlo el enlace. Aquí está la parte importante (lo que representa para onclick):
var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();
Por lo tanto, su función no pasará por el objeto del evento (que de todas maneras no es confiable para el navegador cruzado), pero si se devuelve verdadero / falso, el envío será cortocircuitado.
<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>
Se podrían realizar otras acciones de Javascript (como la validación de entrada de formulario, etc.) reemplazando la llamada para confirm()
con una llamada a otra función.
En JSF 1.2 puede especificar eventos onclick.
Además, otras bibliotecas como MyFaces o IceFaces implementan el controlador "onclick".
Lo que necesitarías hacer entonces es simplemente:
<h:commandLink action="#{bean.action}" onclick="if(confirm(''Are you sure?'')) return false;" />
Nota: no se puede simplemente return confirm(...)
ya que esto bloqueará el resto del JavaScript en el evento onClick, lo que efectivamente evitaría que su acción ocurra sin importar lo que devuelva el usuario.
Si desea ejecutar algo antes de que se publique el formulario, para confirmación, por ejemplo, intente con el evento de formulario en Enviar. Algo como:
myform.onsubmit = function(){confirm("really really sure?")};
Esto nunca funcionó para mí,
onclick="if(confirm(''Are you sure?'')) return false;" />
pero esto hizo
onclick="if(confirm(/"Are you sure?/"))return true; else return false;"
Se puede simplificar así
onclick="return confirm(''Are you sure?'');"
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;
}
}
usa este código para jsf 1.1.
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}"/>