2012-07-12 96 views
5

我在同一个无线电组里有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(最后一个单选按钮)是否被选中与否。有没有什么办法可以确定究竟选择了哪个单选按钮?

回答

2

使单选按钮组像这样工作的唯一方法是按照设计意图使用它们,方法是在FormPanel中使用它们,并从表单的提交操作中查看doPost上的名称(在您的案例中为“dist”) 。

虽然有一些解决方法,使用新的客户端处理程序,使其在任何面板上的单选按钮使用情况与从大致相同。请在跟踪器上查看this issue。您可能还想要明星这个问题,以跟踪更新和投票的种类。

0

我用:

eventData.parameter.source 

,拿起使用addClickHandler的变化。

您需要存储在某个地方,

0

这些按钮假设是在异或模式。如果是这样,他们需要有相同的名字。请查看Serge的answer以获取详细的解释和示例代码。

在我想出了一个解决办法来设置单选按钮以及其间
0

,在这个例子中,我使用一个列表框,但可以使用任何其它数据。

下面是完整的代码:(对测试电子表格中的集装箱)

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值来在文本框的值和列表框允许选择其中的单选按钮被激活...它显示了这样

enter image description here

也有另一种方法,通过eddyparkinson是使用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; 
}​ 
相关问题