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

创建文本框时,为每个文本框分配一个 id,使用setId(id). 当您想稍后获得他们的参考时,您可以使用getElementById(id).

这是一个例子:

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 回答