当更改日期框的值时,应启用下面的按钮。为什么不起作用?
var sbutton = app.createButton('Set Alert').setId('sbutton').setPixelSize(250, 25).setEnabled(true);
// Button to be enabled only after date is set
var buttonenabler = app.createClientHandler().forTargets(sbutton).setEnabled(true);
eventdt.addValueChangeHandler(buttonenabler);
检查此处的代码https://script.google.com/d/1H6DLb8L6Qd3g55Dzn_A7ed61QvM_OcrLINDfya1i1h7JAyV_jLH7nmcq/edit
答案 0 :(得分:1)
最初,在创建过程中,您的按钮已经启用(var sbutton = app.createButton('Set Alert')....setEnabled(true);
),即使执行了处理程序,按钮也会保持启用状态。显示如何在日期框控件值更改时启用禁用按钮的简单演示如下。
function doGet(e) {
var app = UiApp.createApplication();
var date = app.createDateBox();
var btn = app.createButton('Test').setEnabled(false);
var handler = app.createClientHandler().forTargets(btn).setEnabled(true);
date.addValueChangeHandler(handler);
app.add(date);
app.add(btn);
return app;
}
更新:我查看了您的代码。似乎这是GAS中的一个错误。将setFormat
函数调用添加到DateBox
对象时,会出现此问题。请参阅以下代码重现该问题。如果要更改第1个日期框中的值,则启用第1个按钮。如果要更改第二个日期框的值,则不启用第二个按钮。差异仅在setFormat
电话中。 bug已提交给问题跟踪器,作为解决方法,您可以在代码中对setFormat
次来电进行评论。
function doGet(e) {
var app = UiApp.createApplication();
var date = app.createDateBox();
var dateBug = app.createDateBox().setFormat(UiApp.DateTimeFormat.DATE_TIME_MEDIUM);
var btn = app.createButton('Test').setEnabled(false);
var btnBug = app.createButton('Test Bug').setEnabled(false);
var handler = app.createClientHandler().forTargets(btn).setEnabled(true);
var handlerBug = app.createClientHandler().forTargets(btnBug).setEnabled(true);
date.addValueChangeHandler(handler);
dateBug.addValueChangeHandler(handlerBug);
app.add(date);
app.add(btn);
app.add(dateBug);
app.add(btnBug);
return app;
}