Google apps script 气体标签可见度

Google apps script 气体标签可见度,google-apps-script,Google Apps Script,此代码应该更改标签可见性状态…但它喜欢隐藏。你可以看到我试图用两种不同的方式定义rlabel。我在使用代码注释//时遇到一个未定义的错误。我知道它正在执行else语句。谢谢你的时间 function showDialog() { var app = UiApp.createApplication(); var panel = app.createHorizontalPanel(); panel.add(label3); ... var label3 = app.createLabel

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

假设从UI中的某个处理程序调用了
respondtoSubmit(e)
,则必须
返回应用程序位于函数末尾。这就是GAS如何向用户更新视图

您需要执行
app.createLabel('Bad Pin').setName('BADPIN')
才能在表单提交时访问标签。设置ID是不够的。

您在代码中执行此操作的方式,
label3.setId('BADPIN')和lateron通过
var rlabel=app.getElementById('BADPIN')访问它是正确的方法。另一种方法是,通过
e.parameter
传递它,它只能用于访问小部件值,而不是操纵小部件本身,并且仅适用于具有setName方法的元素,而对于标签则不适用(请参阅) 因此,您没有显示的代码部分应该包含在showDialog()中:

并且,为了确认已执行处理程序中的else部分,请添加一个记录器输出:

else {  //show bad pin label 
  var rlabel =app.getElementById('BADPIN');
  rlabel.setVisible(true); 
  Logger.log ("rlabel.setVisible(true); just called");
}

检查它,如果它仍然不起作用,发布你的整个代码,肯定有另一个错误,然后在某处

Phil,我漏掉了那一行,但是它就在那里。GTM,我已经尝试过了,但是。setName对于标签来说是无效的语法。它适用于我的文本框。Error msg:TypeError:在对象标签中找不到函数setName。下面的代码使用服务器Handlers@GTMID用于引用具有
getElementById()
的小部件,该名称仅用于使用事件信息参数在处理程序函数中检索小部件值。
是否为“BADPIN”
标签是否隐藏在代码中的其他位置?这段代码可能在设置为visible后立即被调用。不,这是对rlabel/Badpin的最后一次调用。对
setVisible(false)
的唯一调用是在ShowDialog中。是否确实确定您的条件允许调用
rlabel.setVisible(true)
?我想不是。。。在调用
setVisible
之后,使用记录器进行如下检查
logger.log('setVisible on label BAD PIN')
,您将确切地知道发生了什么只有一种方法可以访问小部件来更改其可见性,这就是使用其ID和
getElementById(),
e.parameter.name
只能检索小部件值。我很确定你很清楚这一点,但你的回答有点含糊不清,可能会让人们认为这两种方法在这篇文章的范围内都是可行的。清澈如清水:-)或者清澈如水晶,如果你喜欢的话。。。感谢更新感谢您的回复。我已经更新了我原来的帖子,添加了代码澄清。发生了一些有趣的事情。logger语句打印在else中。如果我更改label3.setId('BADPIN').setVisible(true);在ShowDialog中,它显示良好。我能想到的唯一一件事就是它与return app.close()联系在一起;在if中先于它。但是我不希望应用程序在else条件下关闭。但是您必须从处理程序返回应用程序。返回app.close()是不够的,因为这将返回close方法的返回值。页面上有一条评论,上面写着:`return app;//如果不返回UiInstance,更改就不会发生`pbhd,你是个天才。就是这样…只需要添加
return应用程序到其他。
else {  //show bad pin label 
  var rlabel =app.getElementById('BADPIN');
  rlabel.setVisible(true); 
  Logger.log ("rlabel.setVisible(true); just called");
}