下面的代碼給了我一些頭痛的問題。 這是一個非常簡單的應用程序,有2個單選按鈕和一個按鈕。這個應用程序的想法是在電子表格中記錄所選單選按鈕的值。 現在,如果我選擇第一個單選按鈕(「one」),然後切換到第二個單選按鈕(「two」),然後回到「one」並單擊「Record」按鈕,應用程序將在電子表格。這種積累的選擇。使用radioButton時的奇怪行爲()
不知道我說清楚了,但這裏有模擬問題的步驟:
1以下運行的應用; 2-選擇單選按鈕「one」,然後選擇「two」和「one」並按下「Record」按鈕; 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);
}
嗨塞爾INSAS。謝謝你的答案。但是,如何在使用GUI Builder時做到這一點?我使用GUI Builder創建了一個應用程序,並在那裏添加了單選按鈕。 –
這個想法是一樣的,你可以看看[這個例子](https://docs.google.com/spreadsheet/ccc?key=0AnqSFd3iikE3dFZ2ajhKblJxUlBFTU1pdjUtZVdLTWc#gid=0)去我在那裏設置的第464行的腳本啓動ClientHandlers以允許將單選按鈕的值寫入文本框中。然後,這個文本框中的serverHandler讀取值。 –
Oooops,第456行...不是464 ...順便說一句,在腳本中設置處理程序要比在GUI中設置要容易得多,這就是我通常這樣做的原因。 –