Код ниже дает мне головную боль. Это очень простое приложение с двумя переключателями и кнопкой. Идея этого приложения состоит в том, чтобы записать в электронную таблицу значение выбранной радиокнопки. Теперь, если я выберу 1-ю радиокнопку («один»), а затем перейду ко второму переключателю («два»), а затем вернусь к «одному» и нажмите кнопку «Запись», приложение будет записывать 3 раза в таблицу. Это как бы накапливает выбор.Странное поведение при использовании radioButton()
Не знаю, если я сделал себе ясно, но вот шаги, чтобы сымитировать вопрос:
1- Выполнить бланк; 2- Выберите радиокнопку «один», затем «два» и «один» еще раз и нажмите кнопку «Запись»; 3- Проверьте электронную таблицу на дублированные значения.
Чем больше вы будете нажимать на переключатели, тем больше дублирующихся значений будут записаны.
Любая идея, почему это происходит и как я могу преодолеть эту проблему?
function myAppFunction() {
var mydoc = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication().setTitle('Here is the title bar');
var panel = app.createVerticalPanel().setId('panel');
//using setName will give you the ability to get the value
var myRadio1 = app.createRadioButton("group","one").setName('myRadio1').setId('myRadio1');
var myRadio2 = app.createRadioButton("group","two").setName('myRadio2').setId('myRadio2');
var button = app.createButton("Gravar").setId("record_");
//A label will be used to give feedback on the value of the checkBox
var infoLabel = app.createLabel('Check the box and click submit').setId('infoLabel');
//handlers
var handler = app.createServerChangeHandler('radio1');
handler.addCallbackElement(panel);
myRadio1.addClickHandler(handler);
var handler2 = app.createServerChangeHandler('radio2');
handler2.addCallbackElement(panel);
myRadio2.addClickHandler(handler2);
//put everything in the UI
panel.add(myRadio1);
panel.add(myRadio2);
panel.add(button);
panel.add(infoLabel);
app.add(panel);
mydoc.show(app);
}
function radio1(e){
var app = UiApp.getActiveApplication();
app.getElementById('myRadio2').setValue(false);
app.getElementById('infoLabel').setText('one is: ' + e.parameter.myRadio1);
var panel = app.getElementById("panel");
var button = app.getElementById("gravar");
var handler = app.createServerClickHandler("record_");
handler.addCallbackElement(panel);
button.addClickHandler(handler);
return app;
}
function radio2(e){
var app = UiApp.getActiveApplication();
app.getElementById('myRadio1').setValue(false);
app.getElementById('infoLabel').setText('two is: ' + e.parameter.myRadio2);
var button = app.getElementById("gravar");
var handler = app.createServerClickHandler("gravar_");
handler.addCallbackElement(app.getElementById("panel"));
button.addClickHandler(handler);
return app;
}
function record_(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var lastRow = sheet.getLastRow();
var freeCell = sheet.getRange("A1").offset(lastRow, 0);
freeCell.setValue(e.parameter.myRadio1);
}
Привет Serge INSAS. Спасибо за ответ. Но как это можно сделать при использовании GUI Builder? Я создал приложение с помощью GUI Builder, и там были добавлены переключатели. –
идея такая же, вы можете взглянуть на [этот пример] (https://docs.google.com/spreadsheet/ccc?key=0AnqSFd3iikE3dFZ2ajhKblJxUlBFTU1pdjUtZVdLTWc#gid=0) перейти к сценарию в строке 464, где я установил чтобы ClientHandlers разрешали записывать значения радиоблока в текстовое поле. Затем значение считывается серверомHandler в этом текстовом поле. –
Oooops, строка 456 ... not 464 ... btw гораздо проще установить обработчики в скрипте, чем в графическом интерфейсе, поэтому я обычно так делаю. –