Google脚本:在DateBox中使用setFireEventsForInvalid

时间:2013-11-16 18:28:55

标签: google-apps-script google-apps

我是编写脚本的新手。我正在使用谷歌Ui应用程序,如果输入的日期无效,我试图获取一个触发DateBox的处理程序,这样就会出现一条消息,但我无法让它工作。 这是我的代码的一部分:

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;
}

即使我只在日期框中放入文本,处理程序似乎也不会触发。

1 个答案:

答案 0 :(得分:0)

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

你真的希望发生什么?为什么客户验证不够充分?

如果你真的想要触发服务器验证,那么here is a test code会执行并显示结果,以帮助您查看会发生什么。(单击标签以触发处理程序)

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;
}

enter image description here