Come posso eseguire Javascript prima che venga eseguita un'azione JSF <h:commandLink>?[duplicare]

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

  •  09-06-2019
  •  | 
  •  

Domanda

Questa domanda ha già una risposta qui:

Se hai un JSF <h:commandLink> (che utilizza il onclick evento di un <a> per inviare il modulo corrente), come si esegue JavaScript (ad esempio chiedendo la conferma dell'eliminazione) prima che l'azione venga eseguita?

È stato utile?

Soluzione 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>

Altre azioni Javascript (come la convalida dell'input del modulo, ecc.) potrebbero essere eseguite sostituendo la chiamata a confirm() con una chiamata ad un'altra funzione.

Altri suggerimenti

Può essere semplificato in questo modo

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

Questo ha funzionato per me:

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

Puoi ancora utilizzare onclick.Il JSF specifica del kit di rendering (vedi Comportamento codifica) descrive come il collegamento dovrebbe gestirlo.Ecco la parte importante (cosa rende per onclick):

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

Quindi alla tua funzione non verrà passato l'oggetto evento (che comunque non è affidabile tra browser), ma restituire true/false cortocircuiterà l'invio.

In JSF 1.2 è possibile specificare gli eventi onclick.

Inoltre, altre librerie come MyFaces O IceFaces implementare il gestore "onclick".

Quello che dovresti fare allora è semplicemente:

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

Nota:non puoi semplicemente fare return confirm(...) poiché ciò bloccherà il resto del JavaScript nell'evento onClick, il che impedirebbe effettivamente che la tua azione avvenga, indipendentemente da ciò che l'utente ha restituito!

Se vuoi eseguire qualcosa prima che il modulo venga pubblicato, ad esempio per una conferma, prova l'evento del modulo onSubmit.Qualcosa di simile a:

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

Questo non ha mai funzionato per me,

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

ma questo è successo

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;
    }
} 

utilizzare questo codice per jsf 1.1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top