listBox
Google Apps のスクリプト作成は少し新しいのですが、クラスで奇妙な動作をしているように見えます。スクリプトのより大きなスニペットを次に示します。
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 は表示されません。リストボックスは、スプレッドシートのデータから期待どおりに表示されます。name の場合と同様に、 setId()メソッドでidタグをリストボックスに追加するべきではありませんか(以下を参照)。
inspect 要素によって報告されたリストボックス:
<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が明確に欠落していることに注意してください。ただし、明らかに名前が設定されています。