Wenn Sie eine JSF <h:commandLink>
haben (die das -Ereignis verwendet, um das aktuelle Formular zu senden), wie führen Sie vor der Ausführung der Aktion JavaScript aus (z. B. um die Löschbestätigung anzufordern)?Wie kann ich Javascript ausführen, bevor eine JSF <h: commandLink> -Aktion ausgeführt wird?
Antwort
<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>
Weitere Aktionen Javascript (wie Validierung Formulareingabe usw.) könnte durch Ersetzen der Anruf confirm()
mit einem Aufruf einer anderen Funktion durchgeführt werden.
Sie können immer noch onclick verwenden. Die JSF render kit specification (siehe Encode-Verhalten) beschreibt, wie der Link damit umgehen soll. Hier ist der wichtige Teil (was es macht für Onclick):
var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();
So pflegen Sie Ihre Funktion das Ereignis-Objekt übergeben werden (die nicht zuverlässig Cross-Browser ist sowieso), aber Rückkehr wahr/falsch Willen Kurzschluss der Einreichung.
Ich kann dem
In JSF 1.2 können Sie onclick-Ereignisse angeben.
Auch andere Bibliotheken wie MyFaces oder IceFaces implementieren den "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 dem OnClick-Ereignisse blockieren passiert, was würde effektiv Stoppen Sie Ihre Aktion, egal was der Benutzer zurückgegeben hat!
Wenn Sie etwas ausführen möchten, bevor das Formular gesendet wird, versuchen Sie zur Bestätigung das Formularereignis onSubmit. Etwas wie:
myform.onsubmit = function(){confirm("really really sure?")};
Diese 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;"
Ich kann dem
@ grant-wagner, ich weiß, es ist viele Jahre jetzt, aber vielleicht Implementierung, die Sie zu der Zeit verwendet wurde – akostadinov
Kann wie diese
onclick="return confirm('Are you sure?');"
vereinfacht werden
lustig, dass 'if' Konstrukte sind in allen Posts unten von Entwicklern mit etwas Erfahrung vorgeschlagen .. und noch lustiger ich Ich lerne von ihnen :) – akostadinov
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.
Das ist für mich gearbeitet:
<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"
id="newibutton"
onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;"
value="#{bundle.NewPatient}"/>
Das kann vereinfacht werden als 'onclick =" zurück bestätigen ('Bist du sicher?') "'. Es ist nicht notwendig, einen booleschen Wert zu überprüfen, um einen booleschen Wert zurückzugeben. Gib es einfach direkt zurück. – BalusC
Gibt es einen einfachen Weg in Primefaces, um das obige zu implementieren, indem du stattdessen '
Verwandte: http://stackoverflow.com/questions/4571488/confirmation-on-submit – BalusC
@ BalázsMáriaNémeth Würden Sie mir bitte erklären, wie sie nicht? – EJP