我有以下代码和平:
<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>
以上内容放在一个表格中,用户可以勾选复选框并单击上面的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;
}
并在命令链接中点击: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>
任何帮助将不胜感激。谢谢
答案 0 :(得分:5)
问题是你总是回来。我认为你想要的只是在必要时返回假,否则继续。
因此,请将您的onclick更改为
onclick="if (checkSelected()) { return false; }"
这肯定是Ajax提交表单的问题,因为如果您之前返回,则永远不会调用提交。我可以想象,这也适用于标准表单。
答案 1 :(得分:0)
如果在commandLink的onclick事件中返回false,则不会提交表单