我有以下代码和平:
<DIV>
<h:commandLink action="#{documentGen.generatePDF}"
target="_blank"
onclick="return checkSelected();">
<h:graphicImage url="/images/pdf.jpg"
styleClass="pdfimage" title="Click to show PDF"></h:graphicImage>
</h:commandLink>
</DIV>
Run Code Online (Sandbox Code Playgroud)
上面的内容放在一个表中,用户可以勾选复选框并单击上面的commandLink,这意味着打开一个新窗口并显示backbean生成的内容 #{documentGen.generatePDF}.
如果我不包括,这可以按预期工作onclick="return checkSelected();".如果我包含它然后从不调用backbean,而是我得到一个新窗口,它是当前的重复.
我需要这个javascript函数来检查用户是否至少选中了1复选框,否则显示警告.Javascript函数工作正常,如果在单击commandLink时没有勾选复选框,我会看到警报.
我的问题是,为什么它会onclick搞乱commandLink的作用?我究竟做错了什么?
更新:
在h:commandLink里面h:form.如上所述,上面的命令链接按预期工作,没有onclick=.....
为了测试,我将onclick上调用的javascript函数更改为:
function testFunc() {
alert("GOT Here!")
return ture;
}
Run Code Online (Sandbox Code Playgroud)
并在命令链接中单击以: onclick="return testFunc();"
结果是我收到警告"GOT Here!" 但和以前一样,新窗口是当前窗口的副本,并且不会调用backbean.删除onclick行会更正结果(但需要使用javascript函数来检查已选中的复选框).
在浏览器源视图中,没有onclik和onclick的commandlink之间的区别如下:
<a href="#" onclick="return oamSubmitForm('genView','genView:_idJsp33','_blank',[]);" id="genView:_idJsp33" target="_blank"><img src="/images/pdf.jpg" title="Click for Pdf Document" class="pdfimage"></a>
<a href="#" onclick="return testFunc();;return oamSubmitForm('genView','genView:_idJsp33','_blank',[]);" id="genView:_idJsp33" target="_blank"><img src="/images/pdf.jpg" title="Click for Pdf Document" class="pdfimage"></a>
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.谢谢
小智 5
问题是你总是回来.我想你想要的只是在必要时返回false,否则继续.
所以改变你的onclick
onclick="if (checkSelected()) { return false; }"
这肯定是Ajax提交表单的问题,因为如果您之前返回,则永远不会调用submit.我可以想象,这也适用于标准格式提交.