2014-09-02 3 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) 관련이있을 수 있습니다 –

답변

0

문자열을 마치 배열로 반복하면 설명하는 동작을 얻을 수 있습니다. 이미 아니라면 당신은, 첫번째 배열을 변환 할 수 있습니다 하나

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

환호성 브루스! 저건 완벽 해. –

1

당신은이 :

var list = []; 
다음 목록에 빈 배열을 할당

:

list = formObject.listElement 

formObject.listElement에 의해 반환되는 무엇으로 대체하기 때문에 초기 할당 무의미하다.

listElement의 컨트롤 유형을 나타내지 않았으므로 Class MultipleChoiceItem 또는 Class ListItem 일 수 있습니다. 둘 다 getChoices 메서드를 사용하여 선택 항목의 배열을 반환합니다. 당신이 그 방법을 사용하는 경우

, 반환 값이 배열인지 여부를 테스트 할 필요가 없을 것, 그것은 항상 (비어) 배열이됩니다 :

list = formObject.listElement.getChoices(); 

는 가정 listElement 그 위의 개체 중 하나입니다.

+0

꼬리말 ")"은 게시물의 오타였습니다. Apps Script를 사용하기 때문에 목록에 대한 참조는 formObject에 있으며 함수에 전달됩니다. 그런 다음 목록 요소의 값을 변수 목록에 할당하려고 시도하지만 하나의 항목이 선택되면 배열처럼 표시되지 않습니다. –

+1

하나의 항목이 선택되면,'formObject.listElement'는 선택된 항목의 값을 리턴하고, 여러 항목이 선택된 경우, 값의 배열을 리턴 할 수 있습니다. 다른 시나리오에 대해'typeof list'에 대해 무엇을 얻으십니까? – RobG

+0

알겠습니다. 하나의 항목 만 포함 된 경우 typeof가 문자열을 반환했습니다. 둘 이상의 항목이 반환 된 경우 객체 (배열)입니다. –

관련 문제