Google apps script Google脚本:使用setFireEventsForInvalid和DateBox

Google apps script Google脚本:使用setFireEventsForInvalid和DateBox,google-apps-script,google-apps,Google Apps Script,Google Apps,我对写剧本是完全陌生的。我正在使用谷歌Ui应用程序,如果输入了无效的日期,我会尝试为日期框启动一个处理程序,这样会出现一条消息,但我无法让它工作。 这是我代码的一部分: var grd = app.getElementById('GRDprojDates'); grd.setWidget(0, 0, app.createLabel('Project Start Date').setStyleAttributes(styleLabel2)); grd.setWidget(1, 0, app.cre

我对写剧本是完全陌生的。我正在使用谷歌Ui应用程序,如果输入了无效的日期,我会尝试为日期框启动一个处理程序,这样会出现一条消息,但我无法让它工作。 这是我代码的一部分:

var grd = app.getElementById('GRDprojDates');
grd.setWidget(0, 0, app.createLabel('Project Start Date').setStyleAttributes(styleLabel2));
grd.setWidget(1, 0, app.createLabel('Project End Date').setStyleAttributes(styleLabel2));

grd.setWidget(0, 1, app.createDateBox().setId('DateProjStart')
                                       .setName('DateProjStart')
                                       .setStyleAttributes(styleTBox3)
                                       .setFormat(UiApp.DateTimeFormat.YEAR_MONTH_ABBR_DAY));
grd.setWidget(1, 1, app.createDateBox().setId('DateProjEnd')
                                       .setName('DateProjEnd')
                                       .setStyleAttributes(styleTBox3)
                                       .setFormat(UiApp.DateTimeFormat.YEAR_MONTH_ABBR_DAY));

var hndDateValid = app.createServerHandler('DateVailidation').addCallbackElement(app.getElementById('DateProjStart'))
                                                             .addCallbackElement(app.getElementById('DateProjEnd'))

app.getElementById('DateProjStart').setFireEventsForInvalid(true).addValueChangeHandler(hndDateValid); 
app.getElementById('DateProjEnd').setFireEventsForInvalid(true).addValueChangeHandler(hndDateValid); 
处理程序调用的函数与此类似

function DateVailidation(e)
{
  var app = UiApp.getActiveApplication();

  var dateStart = e.parameter.DateProjStart;
  var dateEnd = e.parameter.DateProjEnd;

  if (dateStart == null) 
  {app.add(app.createLabel("Enter Valid Date"));}

  return app;
}

即使我只在日期框中输入文本,处理程序似乎也不会启动

函数
DateVailidation(e)
从未被调用似乎是合乎逻辑的,因为您对日期小部件进行了验证,以防止在日期无效时触发(这就是为什么您在日期小部件中获得红色来告诉您日期无效)

你到底希望发生什么?为什么客户验证不够

如果确实要触发服务器验证,则会执行并显示结果,以帮助您查看发生了什么。(单击标签以触发处理程序)

function doGet() {
  var app = UiApp.createApplication();
  var grd = app.createGrid(2,2)
  grd.setWidget(0, 0, app.createLabel('Project Start Date'));
  grd.setWidget(1, 0, app.createLabel('Project End Date'));
  var start = app.createDateBox().setId('DateProjStart').setName('DateProjStart').setFormat(UiApp.DateTimeFormat.YEAR_MONTH_ABBR_DAY);
  var end = app.createDateBox().setId('DateProjEnd').setName('DateProjEnd').setFormat(UiApp.DateTimeFormat.YEAR_MONTH_ABBR_DAY);
  grd.setWidget(0, 1, start)
  grd.setWidget(1, 1, end)

  var hndDateValid = app.createServerHandler('DateValidation').addCallbackElement(grd);

  var mainHandler = app.createServerHandler('DateValidation').addCallbackElement(grd);
  grd.addClickHandler(mainHandler);

  start.setFireEventsForInvalid(true).addValueChangeHandler(hndDateValid); 
  end.setFireEventsForInvalid(true).addValueChangeHandler(hndDateValid); 
  app.add(grd);
  return app;
}

function DateValidation(e){
  var app = UiApp.getActiveApplication();
  var dateStart = e.parameter.DateProjStart;
  var dateEnd = e.parameter.DateProjEnd;
  app.add(app.createLabel("Enter Valid Date  ("+e.parameter.DateProjStart+')  ('+e.parameter.DateProjEnd+')'));
  return app;
}