我在同一个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。有没有办法确定选择哪个单选按钮?
答案 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 ...它显示为这样
如[{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;
}