2013-10-02 71 views
4

我做一個portlet在Liferay中有這樣的形式:動態形式AUI Liferay的

​​

我想,當有人點擊按鈕添加一個新的選擇,但我不知道該怎麼辦了新的。我試着用JavaScript和做到這一點:

var conditions = document.getElementById('conditions'); 
conditions.innerHTML('<aui:select ...>...</aui:select>'); 

document.createElement('<aui:select>'); 

我AUI腳本嘗試過這樣做的:

var nodeObject = A.one('#divAtr'); 
nodeObject.html('<aui:input type="text" name="segment21" label="Segment" value="lalal" />'); 

但它不工作,因爲是HTML和沒有按」 t可以創建AUI,如果我用HTML正常創建新的選擇,當我捕獲值時,有些會丟失。

謝謝。

回答

2

正如@Baxtheman所說,這不起作用,因爲標籤不是客戶端HTML標籤,而是aui-taglib的服務器端標籤。

動態地加載選擇框的內容,你會想請按照下列步驟操作:

  1. 在JSP中添加元素,但要隱藏

    <aui:select id="conditions" style="display: none;"><aui:select>

  2. 從你的javascript,當事件發生時,你想用來加載你的第二個選擇框,你會選擇下拉框,並添加你想要的選項,像這個帖子的答案Adding options to select with javascript

  3. 確保在加載選項後將選擇框設置爲可見。

    document.getElementById('<portlet:namespace/>conditions').style.display = 'block';

爲了更清楚,你錯過的POST信息,如果你添加一個普通的HTML選擇框的原因,是因爲AUI方式:形式序列化的數據。我相信最終只會收集aui元素的自定義onSubmit。

+1

我想你需要使用document.getElementById(' conditions')。style.display ..糾正我,如果我錯了 –

+0

我相信你是正確的基蘭。謝謝,我會更新以反映這種疏漏。來自aui標籤的呈現元素明確地將portlet名稱空間添加到id和name屬性中。接得好。 – Barryrowe

+0

這不是一個只收集aui元素的自定義提交,它是將提交的內容過濾到以爲前綴的內容的portlet。 –

1

< aui:select >是一個JSP taglib,而不是最終的HTML標記。

如果你明白這一點,你可以解決。