2012-04-11 99 views
4

我試圖在按鈕單擊上執行JavaScript並同時在後臺設置屬性。執行JS代碼有效,但屬性操作偵聽器不會被調用。但是,當我刪除onclick屬性時,單擊命令按鈕時將在後臺設置屬性。我也嘗試使用actionListener。但同樣的問題。這裏是我的JSF代碼:JSF:一起使用onclick + actionListener

<rich:dataTable value="#{bean.items}" var="item"> 
    <rich:column> 
    <a4j:commandButton value="Upload" onclick="Richfaces.showModalPanel('p-id');return false;"> 
     <f:setPropertyActionListener target="#{bean.targetId}" value="#{item.id}" /> 
    </a4j:commandButton> 
</rich:column> 
// more columns 
</rich:dataTable> 

我在這裏錯過了什麼嗎?

+3

return false;在你的onclick阻止繼續執行a4j:commandButton,刪除返回false; – Daniel 2012-04-11 12:54:52

回答

3

<a4j:commandButton>組件生成一個HTML <input type="submit">元素以及與當前問題無關的一堆JS代碼。

將組件的onclick屬性生成爲同一個HTML元素的onclick屬性。 onclick屬性通常引用一些JavaScript代碼,當在特定的HTML元素上觸發HTML DOM click事件時會執行該代碼。當最終用戶單擊HTML元素時,會立即觸發此事件,並且這會在調用之前調用HTML元素的默認操作(提交父表單)。更甚者,默認操作可以由JavaScript代碼的布爾結果來控制。如果它返回false,則默認操作將不會執行。這就是你的情況。

如果要同時調用在onclick屬性的HTML元素<input type="submit">的默認操作的JavaScript代碼,那麼你必須返回true,或只是爲了完全消除return false;件。