1

更改日期框的值后,应该启用下面的按钮。为什么它不起作用?

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

4

1 回答 1

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对象时会出现问题。请参阅以下重现该问题的代码。如果要更改第一个日期框中的值,则启用第一个按钮。如果要更改第二个日期框的值,则不启用第二个按钮。区别仅在于setFormat通话。将错误提交给问题跟踪器,作为一种解决方法,您可以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;
}
于 2012-09-08T12:07:45.507 回答