在下面的代码中,我定义了一个名称和id的TextBox。按钮处理程序工作正常,但我无法获得在TextBox上输入的值。 msgBox显示但e.parameter.matchValue
显示为undefined
。
在应用程序的其他部分,我有相同的逻辑,但有一个ListBox,它工作正常。
我做错了什么?
function chooseColumnValueToMatch() {
var app = UiApp.createApplication().setHeight(150).setWidth(250);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var columnName = ScriptProperties.getProperty("columnNameToMatch");
var h1Line = app.createHTML("<h2>Value to match "+columnName+":</h2>");
var textPara = app.createHTML("<p>Type the VALUE that the <b>"+columnName+"</b> column must match EXACTLY to send the message.</p>");
var selectionHandler = app.createServerHandler('chooseColumnValueToMatchSelectionHandler');
var valueInputBox = app.createTextBox()
.setTitle("Match value for "+columnName)
.setName("matchValue")
.setId("matchValue");
var submitBtn = app.createButton("Submit", selectionHandler);
app.add(h1Line)
.add(textPara)
.add(valueInputBox)
.add(submitBtn);
ss.show(app);
}
function chooseColumnValueToMatchSelectionHandler(e){
var app = UiApp.getActiveApplication();
var columnName = ScriptProperties.getProperty("columnNameToMatch");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var msg = e.parameter.matchValue;
Browser.msgBox("Value to match "+columnName+" column is:", msg, Browser.Buttons.OK);
return app;
}
答案 0 :(得分:6)
您必须使用ServerHandler.addCallbackElement方法。以下代码演示了它。方法调用“告诉”GAS内部,指向作为参数的小部件的值应该传递给处理程序。
如果你有多个小部件,应由处理程序处理,那么,不是用每个小部件调用addCallbackElement
,而是可以将所有控件放到面板上,只将面板指向{{{ 1}}方法参数。 the point 4.4 of this tutorial中的代码以这种方式显示。
addCallbackElement
答案 1 :(得分:2)
您似乎忘记将callbackElement添加到处理程序
你可以这样试试:selectionHandler.addCallbackElement(valueInputBox)
在submitBtn定义之后