Google Apps 脚本编写有点新,但我看到listBox
该类的行为似乎很奇怪。这是脚本的更大片段:
var storeNameHandler = app.createServerHandler("newStoreHandler");
var storeNameLabel = app.createHTML("<BR /><B>Which store or site:</B>");
var LB_storeName = app.createListBox().setId('storeName').setName('storeName');
LB_storeName.addChangeHandler(storeNameHandler);
// Get the stores on the budget sheet.
var stores = budgetSheet.getRange("H2:H").getValues();
// add items to ListBox
LB_storeName.addItem("");
LB_storeName.addItem("NEW STORE/SITE");
stores.forEach(function(item){
if(item!="") LB_storeName.addItem(item);
});
这是 onChange 处理程序:
function newStoreHandler(e) {
var app = UiApp.getActiveApplication();
var storeNameListBox = app.getElementById('storeName');
storeNameListBox.setVisible(false);
var newStoreNameInput = app.getElementById('newStoreName');
newStoreNameInput.setVisible(true);
}
这个想法是让列表框消失,文本输入框出现在 onChange 的同一个地方(或者就在下面,只要有可能)。我将向处理程序添加逻辑以确定一旦我得到这个工作,哪个选择将导致列表框隐藏/输入显示事件发生。
当我检查生成的列表框元素时,它显示名称但storeName
没有 ID。列表框按预期从电子表格中的数据出现。不应该setId()方法将id标记添加到列表框中,就像它为name所做的那样(见下文)?
检查元素报告的列表框:
<select class="gwt-ListBox" name="storeName">
<option value=""></option>
<option value="NEW STORE/SITE">NEW STORE/SITE</option>
<option value="Costco">Costco</option>
<option value="Amazon.com">Amazon.com</option>
<option value="Woot.com">Woot.com</option>
</select>
请注意明显缺少id但显然正在设置名称。