Wie kann ich Javascript vor einem JSF ausführen Aktion ausgeführt wird? [Duplikat]

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

  •  09-06-2019
  •  | 
  •  

Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              Bestätigung auf einreichen                                      1 Antwort                          
  •     
    

Wenn Sie eine JSF <h:commandLink> haben (die die onclick Falle eines <a> verwendet das aktuelle Formular abschicken), wie ausführen Sie JavaScript (wie zum Löschen Bestätigung fragen) vor der Aktion durchgeführt werden?

War es hilfreich?

Lösung 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>

Andere Javascript-Aktionen (wie Formulareingabe Validierung usw.) könnte durch Ersetzen der Anruf durchgeführt werden mit einem Aufruf einer anderen Funktion confirm().

Andere Tipps

kann wie folgt vereinfacht werden

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

Das funktioniert für mich:

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

Sie können nach wie vor Onclick verwenden. Die JSF machen Kit Spezifikation (siehe Encode Verhalten) beschreibt, wie der Link sollte damit umgehen. Hier ist der wichtige Teil (was es für Onclick macht):

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

So Ihre Funktion wird nicht das Objekt Ereignis übergeben werden (die nicht zuverlässig Cross-Browser ist sowieso), aber Rückkehr wahr / falsch Willen Kurzschluss die Vorlage.

In JSF 1.2 Sie Onclick Ereignisse angeben.

Auch andere Bibliotheken wie MyFaces oder IceFaces die Umsetzung "Onclick" Handler.

Was müssen Sie dann zu tun ist einfach:

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

Hinweis: Sie können nicht nur tun return confirm(...), da dies den Rest des JavaScript in der OnClick-Ereignis blockieren geschieht, die effektiv Ihre Aktion geschieht unabhängig davon, aufhören würde, was der Benutzer zurückgegeben

Wenn Sie etwas ausführen wollen, bevor das Formular gebucht wird, zur Bestätigung zum Beispiel versuchen, das Formular Ereignis onSubmit. So etwas wie:

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

Dieses nie für mich gearbeitet,

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

aber das hat

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

Verwenden Sie diesen Code für JSF 1.1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top