2

テキストボックスが次のように作成されているかどうかを確認したいと思います。

(function(arr) {
    for (var i = 0; i < arr.length; i++) {
        app.add(app.createLabel(arr[i] + " mail"));
        app.add(app.createTextBox().setName(arr[i]));
    }
})(["first", "second", "third"]);

同じ内容ですか?getElementByTagnameやgetTextboxesのようなものを探していましたが、そのような関数はありません。

では、それらを繰り返し処理し、それらがすべて等しい場合にラベルを表示するにはどうすればよいでしょうか。

4

2 に答える 2

0

When you create the textboxes, assign each one an id using setId(id). When you want to obtain their reference later, you can then use getElementById(id).

Here is an example:

function doGet() {
  var app = UiApp.createApplication();
  app.add(app.createTextBox().setId("tb1").setText("the original text"));
  app.add(app.createButton().setText("Change textbox").addClickHandler(app.createServerHandler("myHandler")));
  return app;
}

function myHandler() {
  var app = UiApp.getActiveApplication();
  app.getElementById("tb1").setText("new text: in handler");
  return app;
}
于 2012-11-08T08:13:00.243 に答える
0

ウィジェット値にアクセスするには、それらを処理するサーバー ハンドラにコールバック要素 (または親パネル) として追加する必要があります。各ウィジェットの値は、ハンドラー関数に渡されたパラメーターに設定され、name(既に設定した) ウィジェットによって参照できます。

setId別の回答で提案されているようにする必要はありません。ウィジェット自体 (およびその値ではない) で何かをしたい場合を除きます。たとえば、テキストを変更したり、非表示にしたりします。

var textBoxes = ["first", "second", "third"];

function example() {
  var app = UiApp.createApplication().setTitle('Test');
  var panel = app.createVerticalPanel();
  textBoxes.forEach(function(name){
    panel.add(app.createLabel(name + " mail"));
    panel.add(app.createTextBox().setName(name));
  });
  panel.add(app.createLabel('Example Label').setId('label').setVisible(false));

  var handler = app.createServerHandler('btnHandler').addCallbackElement(panel);
  panel.add(app.createButton('Click').addClickHandler(handler));

  SpreadsheetApp.getActive().show(app.add(panel));
}

function btnHandler(e) {
  var app = UiApp.getActiveApplication(),
      allEqual = true;
  for( var i = 1; i < textBoxes.length; ++i )
    if( e.parameter[textBoxes[i-1]] !== e.parameter[textBoxes[i]] ) {
      allEqual = false; break;
    }
  app.getElementById('label').setVisible(allEqual);
  return app;
}

はすぐには実行されServerHandlersないため、ボタンをクリックしてからラベルが表示または非表示になるまでに数秒かかる場合があります。

于 2012-11-08T10:03:44.207 に答える