如何在JSF之前执行Javascript<;h:commandLink>;是否执行操作?
如果您有一个JSF如何在JSF之前执行Javascript<;h:commandLink>;是否执行操作?,javascript,jsf,Javascript,Jsf,如果您有一个JSF(它使用事件的onclick来提交当前表单),您如何在执行操作之前执行JavaScript(例如请求删除确认? <h:commandLink id="myCommandLink" action="#{myPageCode.doDelete}"> <h:outputText value="#{msgs.deleteText}" /> </h:commandLink> <script type="text/javascript"&g
(它使用
事件的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>
if(document.getElementById){
var commandLink=document.getElementById(“”);
if(commandLink&&commandLink.onclick){
var commandLinkOnclick=commandLink.onclick;
commandLink.onclick=函数(){
var result=confirm('您真的想吗?');
如果(结果){
返回commandLinkOnclick();
}
返回false;
}
}
}
其他Javascript操作(如验证表单输入等)可以通过将对
confirm()
的调用替换为对另一个函数的调用来执行。您仍然可以使用onclick。JSF(参见编码行为)描述了链接应该如何处理它。以下是重要部分(它为onclick呈现的内容):
因此,您的函数不会被传递给事件对象(这在跨浏览器中是不可靠的),但返回true/false将缩短提交过程。在JSF 1.2中,您可以指定onclick事件 此外,其他库(如或)也实现了“onclick”处理程序 那么,您需要做的只是:
<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />
注意:您不能只执行
返回确认(…)
,因为这将阻止onClick事件中的其余JavaScript发生,这将有效地阻止您的操作发生,无论用户返回什么 如果希望在发布表单之前执行某些操作,例如,为了确认,请尝试在提交时执行表单事件。比如:
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?');"
将此代码用于jsf 1.1。这对我很有用:
<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"
id="newibutton"
onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;"
value="#{bundle.NewPatient}"/>
我无法将onclick属性添加到。我收到以下错误:org.apache.jasper.compiler.CompileException:/MyPage.jsp(164,4)Attribute onclick invalid根据指定的TLD,我还看到许多其他人在论坛上请求类似的解决方案。我无法向其添加onclick属性。我收到以下错误:org.apache.jasper.compiler.compileeException:/MyPage.jsp(164,4)Attribute onclick invalid根据指定的TLD,我还看到许多其他人在论坛上请求类似的解决方案。@grant wagner,我意识到现在已经很多年了,但您当时使用的实现可能已经中断,可以简化为onclick=“return confirm('rease?”)”
。没有必要检查布尔值以返回布尔值。直接返回即可。Primefaces中有没有一种简单的方法可以用
实现上述功能?有趣的是如果有经验的开发人员在下面的所有帖子中都建议使用结构。。更有趣的是,我从他们身上学到了:)@BalázsMáriaNémeth你能给我解释一下他们为什么不是吗?这个问题是关于JSF的,相关的问题不是。区别在于,在javascript代码之后,在本例中,我们仍然希望触发服务器操作,但在相关问题中,这纯粹是客户端问题。我已将此问题标记为重新打开。虽然这两个问题的答案都是取消“onclick”属性,但由于目标副本没有说明它也适用于JSF,因此重定向到该页面的用户会感到困惑。
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;
}
}
<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"
id="newibutton"
onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;"
value="#{bundle.NewPatient}"/>