如果您有一个JSF <h:commandLink>
(使用onclick
的{{1}}事件提交当前表单),您如何执行JavaScript(例如要求删除确认)在行动之前?
答案 0 :(得分:14)
可以像这样简化
onclick="return confirm('Are you sure?');"
答案 1 :(得分:7)
<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>
其他Javascript操作(如验证表单输入等)可以通过调用confirm()
来调用另一个函数来执行。
答案 2 :(得分:7)
这对我有用:
<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"
id="newibutton"
onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;"
value="#{bundle.NewPatient}"/>
答案 3 :(得分:1)
您仍然可以使用onclick。 JSF render kit specification(请参阅编码行为)描述了链接应如何处理它。这是重要的部分(它为onclick提供的内容):
var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();
因此,您的函数不会被传递给事件对象(无论如何都不是可靠的跨浏览器),但返回true / false会使提交短路。
答案 4 :(得分:0)
在JSF 1.2中,您可以指定onclick事件。
此外,MyFaces或IceFaces等其他库实现了“onclick”处理程序。
您需要做的只是:
<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />
注意:您不能只执行return confirm(...)
,因为这会阻止onClick事件中的其他JavaScript发生,无论用户返回什么内容都会有效阻止您的操作发生!
答案 5 :(得分:0)
如果您想在发布表单之前执行某些操作,例如,请尝试使用表单事件onSubmit。类似的东西:
myform.onsubmit = function(){confirm("really really sure?")};
答案 6 :(得分:0)
这对我来说没用,
onclick="if(confirm('Are you sure?')) return false;" />
但这确实
onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
答案 7 :(得分:0)
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;
}
}
将此代码用于jsf 1.1。