5

同じラジオグループの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

4 に答える 4

2

makeラジオボタングループが(設計で意図されているように)このように機能する唯一の方法は、aFormPanelでそれらを使用し、フォームの送信アクションからdoPostで名前(この場合は「dist」)を確認することです。

ただし、いくつかの回避策があります。新しいクライアントハンドラーを使用すると、fromとほぼ同じパネルでラジオボタンを使用できるようになります。トラッカーでこの問題を確認してください。この問題にもスターを付けて、更新と投票の種類を追跡することをお勧めします。

于 2012-07-12T04:29:56.717 に答える
0

これらのボタンは、排他的 OR モードになっているはずです。その場合、それらは同じ名前である必要があります。詳細な説明とサンプル コードについては、Serge の回答を参照してください。

于 2012-08-10T21:42:34.403 に答える
0

その間、ラジオボタンを設定するための回避策も考え出しました。この例では 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 をアクティブにするかを選択できます...次のように表示されます

ここに画像の説明を入力

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;
}​
于 2012-08-10T23:01:14.713 に答える
0

私が使う:

eventData.parameter.source

addClickHandler を使用して変更を取得します。

これをどこかに保存する必要があります

于 2012-07-12T08:06:04.100 に答える