要访问任何小部件值,您需要将它们作为回调元素(或父面板)添加到将处理它们的服务器处理程序。每个小部件的值都填充在传递给处理函数的参数上,并且可以由小部件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
不要立即运行,因此单击按钮后可能需要几秒钟才能显示或隐藏标签。