google apps script - Strange behaviour when using radioButton() -
the code below giving me headache. it's simple application has 2 radio buttons , button. idea of app record in spreadsheet value of radio button selected. now, if select 1st radio button("one") , change second radio button("two") , "one" , click "record" button, app record 3 times in spreadsheet. kind of accumulates selections.
don't know if made myself clear, here steps simulate issue:
1- run application below; 2- select radio button "one", "two" , "one" again , press "record" button; 3- check spreadsheet duplicated values.
the more keep clicking radio buttons, more duplicated values recorded.
any idea why happens , how can overcome issue?
function myappfunction() { var mydoc = spreadsheetapp.getactivespreadsheet(); var app = uiapp.createapplication().settitle('here title bar'); var panel = app.createverticalpanel().setid('panel'); //using setname give ability 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 used give feedback on value of checkbox var infolabel = app.createlabel('check box , 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 in 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); }
radio buttons must have same name work in normal exclusive or mode, if refer doc you'll notice required when using in standard panel. here simple example :
function radiotest() { var app = uiapp.createapplication(); var panel = app.createverticalpanel(); var radiovalue = app.createtextbox(); radiovalue.setid("radiovalue").setname("radiovalue").setvisible(false); for(var = 1; < 10; i++){ var name = 'choice '+i; var handler = app.createclienthandler().fortargets(radiovalue).settext(name); panel.add(app.createradiobutton('radio',name).addvaluechangehandler(handler)); } panel.add(radiovalue); var getit=app.createbutton("valide").setid("val"); panel.add(getit) var handler = app.createserverhandler("valide") handler.addcallbackelement(panel) getit.addclickhandler(handler); app.add(panel); spreadsheetapp.getactivespreadsheet().show(app);// show app } // function valide(e){ ;// function called when key "validate" pressed var sh = spreadsheetapp.getactivesheet(); var ss = spreadsheetapp.getactivespreadsheet(); var radiobutton = e.parameter.radiovalue; sh.getrange('a1').setvalue(radiobutton); var app = uiapp.getactiveapplication(); return app; }
Comments
Post a Comment