Como posso executar Javascript antes que uma ação JSF <h:commandLink> seja executada?[duplicado]

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Essa pergunta já tem resposta aqui:

Se você tem um JSF <h:commandLink> (que usa o onclick evento de um <a> para enviar o formulário atual), como você executa o JavaScript (como solicitar a confirmação de exclusão) antes da ação ser executada?

Foi útil?

Solução 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>

Outras ações Javascript (como validação de entrada de formulário, etc.) podem ser executadas substituindo a chamada para confirm() com uma chamada para outra função.

Outras dicas

Pode ser simplificado assim

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

Isso funcionou para mim:

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

Você ainda pode usar onclick.O JSF especificação do kit de renderização (consulte Comportamento de codificação) descreve como o link deve lidar com isso.Aqui está a parte importante (o que é renderizado para onclick):

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

Portanto, sua função não receberá o objeto de evento (que de qualquer maneira não é confiável entre navegadores), mas retornar verdadeiro/falso causará um curto-circuito no envio.

No JSF 1.2 você pode especificar eventos onclick.

Além disso, outras bibliotecas, como Meus rostos ou Faces de Gelo implemente o manipulador "onclick".

O que você precisa fazer é simplesmente:

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

Observação:você não pode simplesmente fazer return confirm(...) pois isso bloqueará a ocorrência do restante do JavaScript no evento onClick, o que efetivamente impediria que sua ação acontecesse, não importa o que o usuário retornasse!

Se você quiser executar algo antes do formulário ser postado, para confirmação por exemplo, tente o evento de formulário onSubmit.Algo como:

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

Isso nunca funcionou para mim,

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

mas isso fez

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top