在执行JSF操作之前如何执行Javascript?
时间:2020-03-05 18:56:19 来源:igfitidea点击:
如果我们有JSF<h:commandLink>
(它使用<a>
的onclick
事件提交当前表单),那么如何在执行之前执行JavaScript(例如要求删除确认)正在执行的动作?
解决方案
回答
<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()的调用替换为对另一个函数的调用来执行。
回答
我们仍然可以使用onclick。 JSF渲染工具包规范(请参阅编码行为)描述了链接应如何处理它。这是重要的部分(它为onclick呈现的内容):
var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();
因此,函数将不会传递给事件对象(无论如何,这不是可靠的跨浏览器),但是返回true / false将缩短提交。
回答
在JSF 1.2中,我们可以指定onclick事件。
另外,其他库(例如MyFaces或者IceFaces)也实现了" onclick"处理程序。
然后,我们需要做的就是:
<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />
注意:我们不能只是执行return return(()),因为这将阻止onClick事件中其余的JavaScript发生,无论用户返回什么内容,都将有效阻止操作!
回答
如果要在发布表单之前执行某些操作(例如,进行确认),请尝试表单事件onSubmit。就像是:
myform.onsubmit = function(){confirm("really really sure?")};
回答
这对我没用
onclick="if(confirm('Are you sure?')) return false;" />
但这确实
onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
回答
可以这样简化
onclick="return confirm('Are you sure?');"