此代码应该更改标签可见性状态。。。但它喜欢隐藏起来。你可以看到,我试图用两种不同的方式定义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");
}
}
在代码中执行此操作的方式是正确的,服务器中的label3.setId('BADPIN');
和lateron通过var rlabel =app.getElementById('BADPIN');
访问它。另一种方式,通过e.parameter
传递它,只能用于访问小部件值,而不能操作小部件本身,并且仅适用于具有setName方法的元素,而标签则不是这样(请参阅addCallbackElement的docu)
所以你没有显示的代码部分应该在showDialog()中:
app.add(label3);
并且,为了确认处理程序中的其他部分已被执行,添加Logger输出:
else { //show bad pin label
var rlabel =app.getElementById('BADPIN');
rlabel.setVisible(true);
Logger.log ("rlabel.setVisible(true); just called");
}
检查一下,如果它仍然不起作用,发布你的整个代码,肯定有另一个错误。
假设respondtoSubmit(e)
是从UI中的某个处理程序调用的,则必须在函数末尾调用return app;
。这就是GAS知道如何向用户更新视图的方式。
您需要执行app.createLabel('Bad Pin').setName('BADPIN')
才能访问表单提交上的标签。设置ID是不够的。