2012-07-12 27 views
5

Tengo 3 botones de radio en mi Ui en el mismo grupo de radio. Son,¿Cómo saber qué botón de opción está seleccionado?

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

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

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

En la función de controlador de eventos, la variable, e.parameter.dist da verdadero o falso simplemente en función de si rbutton3 (el último botón de radio) está marcada o no. ¿Hay alguna manera de determinar qué botón de opción se selecciona exactamente?

Respuesta

2

La única forma en que el grupo de botones de radio funciona así (según lo previsto por el diseño) es utilizándolos en un FormPanel y buscando el nombre (en su caso "dist") en un doPost de una acción de envío del formulario .

Hay algunas soluciones, sin embargo, el uso de los nuevos controladores de cliente que hacen uso de la radio botones en cualquier panel o menos lo mismo que en el de. Por favor, eche un vistazo a this issue en el rastreador. Es posible que desee star este problema también, para realizar un seguimiento de las actualizaciones y votar a su favor.

0

que utilizo:

eventData.parameter.source 

y recoger el cambio de uso de addClickHandler.

necesita almacenar esto en alguna parte

0

Son estos botones supone que debe estar en un OR exclusivo modo. Si es así, necesitan tener el mismo nombre. Mira el answer de Serge para obtener una explicación detallada y un código de ejemplo.

0

en el ínterin se me ocurrió una solución para establecer el botón de radio, así, en este ejemplo que utiliza un cuadro de lista, pero ningún otro dato podrían utilizarse.

Aquí está el código completo: (a pruebas en un envase de hoja de cálculo)

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; 
}​ 

los valores seleccionados radioButton viene en el valor cuadro de texto y el cuadro de lista permite seleccionar el que se activa radioButton ... de que aparezca como esto

enter image description here

también hay otro enfoque, según lo declarado por eddyparkinson que se va a utilizar el e.parameter.source pero esto funciona solamente si el controlador está asignado directamente al radioButton y no utiliza el botón 'enviar'. En muchos casos puede usarse y hace que el código sea un poco más ligero. Aquí hay una prueba de este código

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; 
}​ 
Cuestiones relacionadas