谷歌应用程序脚本-GAS标签可见性



此代码应该更改标签可见性状态。。。但它喜欢隐藏起来。你可以看到,我试图用两种不同的方式定义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是不够的。

最新更新