Я создал серию переключателей в своем дополнении Gmail.
После нажатия кнопки я хочу получить доступ к значениям переключателей. Некоторые из переключателей могут иметь те же имена полей, которые я устанавливаю с помощью
Функция Switch :: setFieldName, вот так:
var switchKeyValue = CardService.newKeyValue()
.setSwitch(CardService.newSwitch()
.setFieldName(email)
.setValue(name));
Позже я перебираю входные значения (значения переключателей) отправленной формы, используя:
// "e" is the event object passed to the event listener
var form = e.formInput;
var emails = [];
for (key in form) {
if (form.hasOwnProperty(key)) {
emails.push(key);
}
}
Как правило, вы ожидаете, что поля с одинаковыми именами будут перезаписаны, так как они будут добавлены в объект formInput.
Например, если бы я добавил 3 переключателя с именем поля «car» и значениями (в этом порядке) «красный», «синий», «зеленый», результирующая форма будет содержать только {«car»: «green»}.
Однако в документации для функции setFieldName написано:
"В отличие от других полей формы, это имя поля не обязательно должно быть уникальным . Входные значения формы для переключателей, использующих то же имя поля, возвращаются как массив . Массив состоит из значений для всех включенных коммутаторов с таким именем поля. "
Таким образом, можно было бы ожидать получить что-то вроде {"car": ["red", "blue", "green"]}.
Тем не менее, я получаю только строковые значения для каждого переключателя, а не массив, содержащий несколько строк.
В качестве обходного пути я установил имя поля, чтобы оно содержало как исходное имя поля, так и значение поля, используя конкатенацию строк (и разделенный символ), так что я получаю набор ВСЕХ значений виджета. Тем не менее, это не идеально, так как мне придется позже разбить строку, чтобы разобрать ключ и значение поля. Кроме того, это может даже не работать, если символ разделения является частью исходного имени поля.
По сути, я хочу собрать все значения переключателей формы, но мне нужно отслеживать те из них, которые связаны (с одинаковым именем поля).
Каков наилучший способ добиться этого?