2014-09-02 168 views
0

我有一個選擇表單元素,它接受多個項目。如何選擇只有一個項目時選擇多個項目

當提交表單時,我將項目添加到數組中,然後處理它們,然後通過數組運行以對每個項目執行操作。

只有一個項目被選中時,我遇到了問題。

當一個項目通過時數組的長度不是1,它是選定項目中的字符數。

function processForm(formObject){ 
    var list = []; 
    list = formObject.listElement; 

    for (var i=0;i<list.length;i++) { 
    Logger.log(list[i]); 
    } 
} 

如果在表單中選擇了多個項目,上面將記錄每個項目。如果僅選擇一個,則長度是該項目中的字符數。我該如何解決這個問題,如果只有一個項目被選中,我們將其視爲一個項目的數組?

+0

[問題959](https://code.google.com/p/google-apps-script-issues/issues/detail?id=959 )可能是相關的 – 2014-09-02 11:58:10

回答

0

對字符串進行迭代就好像它是一個數組一樣會給出你描述的行爲。你可以先轉換成一個數組,如果它是不是已經一個

var list = formObject.listElement; 
if (!Array.isArray(list)) list = [list]; 
+0

乾杯布魯斯!那很完美。 – 2014-09-02 13:25:36

1

您有:

var list = []; 

它分配一個空數組列表,則:

list = formObject.listElement 

與任何由formObject.listElement返回代替它,因此初始分配是毫無意義的。

您還沒有註冊什麼類型的控制listElement是,它可能是一個Class MultipleChoiceItemClass ListItem。兩者都有一個getChoices方法,該方法返回一組選項。

如果使用這種方法,應該沒有必要測試返回值是否爲數組或不是,它應該永遠是一個(可能爲空)數組:

list = formObject.listElement.getChoices(); 

假設listElement是上述對象之一。

+0

尾隨的「)」是帖子中的錯字。因爲我正在使用Apps腳本,所以對該列表的引用在formObject中傳遞給該函數。然後我嘗試將列表元素的值分配給變量列表,該變量列表可行,但是如果選擇了一個項目,它不會像數組那樣看到它。 – 2014-09-02 11:50:28

+1

這可能是因爲在選擇一個項目時,'formObject.listElement'返回所選項目的值,並且在選擇了多個項目的情況下,它將返回值的數組。對於不同的場景,你會得到什麼'typeof list'? – RobG 2014-09-02 12:30:50

+0

你明白了。如果只包含一個項目,則typeof返回一個字符串。如果返回多個項目,則它是一個對象(數組)。 – 2014-09-02 13:19:45