此代码应该更改标签可见性状态...但它喜欢保持隐藏状态。你可以看到我试图用两种不同的方式定义 rlabel 。使用注释的代码//时出现未定义的错误。我知道它正在执行else语句。谢谢你的时间......
function showDialog() {
var app = UiApp.createApplication();
var panel = app.createHorizontalPanel();
panel.add(label3);
...
var label3 = app.createLabel("Bad PIN");
label3.setId('BADPIN').setVisible(false);
app.add(panel);
var doc = SpreadsheetApp.getActive();
doc.show(app);
...
}
好的,所以对话框参数传递给了这个函数:
function respondtoSubmit(e) {
var app = UiApp.getActiveApplication();
...
if (loftExists(PINValue)==true) {
...
return app.close(); }
else { //show bad pin label
var rlabel =app.getElementById('BADPIN');
rlabel.setVisible(true);
Logger.log ("rlabel.setVisible(true); just called");
}
}
答案 0 :(得分:1)
您在代码中执行此操作的方式,label3.setId('BADPIN');
以及服务器访问者通过var rlabel =app.getElementById('BADPIN');
访问它的方法是正确的方法。另一种方式,通过e.parameter
传递它,只能用于访问窗口小部件值,而不是用于操作窗口小部件本身,并且仅适用于具有setName-Method的那些元素,而不是标签(见docu of addCallbackElement)。
因此,您未显示的代码部分应该在showDialog():
中 app.add(label3);
而且,只是为了确认处理程序中的else-part被执行,添加一个Logger输出:
else { //show bad pin label
var rlabel =app.getElementById('BADPIN');
rlabel.setVisible(true);
Logger.log ("rlabel.setVisible(true); just called");
}
检查它,如果它仍然不起作用,发布你的整个代码,那么某处必须有另一个错误。
答案 1 :(得分:0)
假设您的UI中的某个处理程序调用{{1}},则必须在函数末尾respondtoSubmit(e)
。这就是GAS知道如何向用户更新视图。
答案 2 :(得分:-1)
您需要app.createLabel('Bad Pin').setName('BADPIN')
才能访问表单提交上的标签。设置ID是不够的。