2011-10-18 64 views
0

我有下面的代碼和平:H:commandLink和的onclick JavaScript函數

<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這是旨在開拓一個新窗口並顯示由大豆產生的內容#{documentGen.generatePDF}

這個按預期工作,如果我不要包括onclick="return checkSelected();"。如果我包含它,那麼這個bean就不會被調用,而是我會得到一個新的窗口,它是當前的副本。

我需要這個javascript函數來檢查用戶至少選中了1複選框,否則顯示警報。 Javascript函數正常工作,如果在commandLink被點擊時沒有勾選複選框,我會看到提示。

我的問題是,它爲什麼onclick行弄亂了commandLink的功能?我究竟做錯了什麼?

UPDATE

h:commandLink是內部h:form。如上所述,上述命令鏈接按預期工作,沒有onclick=....

爲了測試我改變了呼籲的onclick javascript函數來:

function testFunc() { 
     alert("GOT Here!") 
     return ture; 
} 

,並在commandlink上點擊:「來到這裏」 onclick="return testFunc();"

結果是我得到警報但是和以前一樣,新窗口是當前窗口的副本,並且不會調用backbean。刪除onclick行更正結果(但需要在那裏的javascript功能來檢查選中的複選框)。

在瀏覽器源查看commandlink之間的差而不onclik並用的onclick是如下:

<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> 

任何幫助,將不勝感激。由於

回答

5

的問題是,你總是回來。我想你想要的只是在必要時返回false,否則繼續。

所以你的onclick改變

onclick="if (checkSelected()) { return false; }"

這是肯定的一個問題,使用Ajax提交表單,因爲提交永遠不會被調用,如果你之前返回。我可以想象,這也是標準表單也提交。

+0

非常感謝你,你發現了。 – ke3pup

0

如果在commandLink的onclick事件返回false,表單就不會被提交