如何知道选择哪个单选按钮?

时间:2012-07-12 03:55:46

标签: google-apps-script

我在同一个Radio组的Ui中有3个单选按钮。他们是,

var rbutton1 = app.createRadioButton('dist','5 miles');

var rbutton2 = app.createRadioButton('dist','10 miles');

var rbutton3 = app.createRadioButton('dist','25 miles');

在事件处理函数中,变量 e.parameter.dist 仅根据是否选中rbutton3(最后一个单选按钮)给出true或false。有没有办法确定选择哪个单选按钮?

4 个答案:

答案 0 :(得分:2)

make单选按钮组的工作方式(按设计意图)是唯一的方法是在FormPanel中使用它们并在提交操作中查看doPost上的名称(在您的情况下为“dist”)形式。

虽然有一些解决方法,使用新的客户端处理程序,使得任何面板上的单选按钮使用与on上的大致相同。请查看跟踪器上的this issue。您也可能希望明星此问题,以便跟踪更新和投票类型。

答案 1 :(得分:0)

我用:

eventData.parameter.source

并使用addClickHandler获取更改。

您需要将其存储在某处

答案 2 :(得分:0)

这些按钮是否处于异或模式。如果是这样,他们需要具有相同的名称。请查看Serge的answer以获取详细说明和示例代码。

答案 3 :(得分:0)

与此同时,我想出了一个解决方案来设置radiobutton,在这个例子中我使用了一个listBox,但是可以使用任何其他数据。

以下是完整的代码:(在电子表格容器中进行测试)

function radiotest() {
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();
  var radioValue = app.createTextBox().setId('radioValue');
      radioValue.setId("radioValue").setName("radioValue");
  var listhandler = app.createServerHandler('listhandler').addCallbackElement(panel); 
  var list = app.createListBox().addChangeHandler(listhandler).setName('list');    
  for(var i = 1; i < 10; i++){
    var name = 'choice '+i;
    list.addItem('Activate '+name,name)
    var handler = app.createClientHandler().forTargets(radioValue).setText(name);
    panel.add(app.createRadioButton('radioButtonGroup',name).addValueChangeHandler(handler).setId(name));
  }
  panel.add(radioValue);
  var getit=app.createButton("Valide").setId("val");
  panel.add(getit).add(list)                   
  var handler = app.createServerHandler("valide")
  handler.addCallbackElement(panel)
  getit.addClickHandler(handler);
  app.add(panel);
SpreadsheetApp.getActiveSpreadsheet().show(app);// show app 
}
//
function valide(e){ ;// This function is called when key "validate" is pressed 
  var sh = SpreadsheetApp.getActiveSheet();
  var RadioButton = e.parameter.radioValue;               
  sh.getRange('A1').setValue(RadioButton);
  var app = UiApp.getActiveApplication();
  return app;
}​

function listhandler(e){ ;// This function is called when listBox is changed
  var sh = SpreadsheetApp.getActiveSheet();
  var app = UiApp.getActiveApplication();
  var listvalue = e.parameter.list
  var radioValue = app.getElementById('radioValue').setValue(listvalue)
  sh.getRange('A2').setValue(listvalue);
  var radiobutton = app.getElementById(listvalue)
  radiobutton.setValue(true)
return app;
}​

所选的radioButton值来自textBox值,listBox允许选择激活哪个radioButton ...它显示为这样

enter image description here

如[{3}}所述,还有另一种方法是使用e.parameter.source,但如果将处理程序直接分配给radioButton并且不使用,则此方法仅 一个'提交'按钮。在许多情况下,它可以使用并使代码更轻(一点点)。 这是对此代码的测试

function radiotest2() {
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();
  var listhandler = app.createServerHandler('listhandler2').addCallbackElement(panel); 
  var list = app.createListBox().addChangeHandler(listhandler).setName('list');    
  var handler = app.createServerHandler("valide2")
  handler.addCallbackElement(panel)
  for(var i = 1; i < 10; i++){
    var name = 'choice '+i;
    list.addItem('Activate '+name,name)
    panel.add(app.createRadioButton('radioButtonGroup',name).setId(name).addClickHandler(handler));
  }
  panel.add(list)                   
  app.add(panel);
SpreadsheetApp.getActiveSpreadsheet().show(app);// show app 
}


function valide2(e){ ;// This function is called when a radioButton is selected
  var sh = SpreadsheetApp.getActiveSheet();
  var source = e.parameter.source;
  var radioValue = '';
  if(source.match('choice')=='choice'){radioValue=source}
  sh.getRange('A1').setValue(radioValue);
  var app = UiApp.getActiveApplication();
  return app;
}​

function listhandler2(e){ ;// This function is called when listBox is changed
  var sh = SpreadsheetApp.getActiveSheet();
  var app = UiApp.getActiveApplication();
  var listvalue = e.parameter.list
  sh.getRange('A2').setValue(listvalue);
  var radiobutton = app.getElementById(listvalue)
  radiobutton.setValue(true)
return app;
}​