Javascript Google UiApp中的Google应用程序脚本验证问题

Javascript Google UiApp中的Google应用程序脚本验证问题,javascript,google-apps-script,dom-events,google-sites,Javascript,Google Apps Script,Dom Events,Google Sites,我一直在努力找出谷歌应用程序脚本在谷歌网站的验证,但还没有使验证部分工作正常 我需要验证两件事: “位置”文本框中至少有5个字符(最多100个) 已从下拉列表中选择日期 如果两个条件都不满足,则应显示两件事: 警告例外 警告例外 就这样 我其余的逻辑工作得很好。我才刚开始 下面列出了完整的逻辑。我已将我们的域信息替换为XXXXXXXX 到目前为止,它要么从不显示消息,什么也不做,要么只是将其中一项做对,就可以继续前进。它们都应该满足要求,或者抛出警告异常。如果用户加载了页面,但没有填充任何一个/

我一直在努力找出谷歌应用程序脚本在谷歌网站的验证,但还没有使验证部分工作正常

我需要验证两件事:

  • “位置”文本框中至少有5个字符(最多100个)
  • 已从下拉列表中选择日期
  • 如果两个条件都不满足,则应显示两件事:

  • 警告例外
  • 警告例外
  • 就这样

    我其余的逻辑工作得很好。我才刚开始

    下面列出了完整的逻辑。我已将我们的域信息替换为XXXXXXXX

    到目前为止,它要么从不显示消息,什么也不做,要么只是将其中一项做对,就可以继续前进。它们都应该满足要求,或者抛出警告异常。如果用户加载了页面,但没有填充任何一个/或区域,只是按下按钮,则情况也是一样的

    如何验证位置文本框和日期框

    var templateIDToCopy = 'xxxxxxxxxx';
    var folderIDtoCopyTo = 'xxxxxxxxxx';
    var councilMembers = ['Unknown','Name 1','Name 2'];
    
    function doGet(e) {
      var text= new Array();
      var app = UiApp.createApplication();
      var hpanel = app.createGrid(4, 6).setId('pannel');
      var hpanelException = app.createGrid(2,3).setId('hpanelException');
      var location = app.createTextBox().setName('location').setId("location").setWidth('200');
      var minuteTaker = app.createListBox().setName('minuteTaker').setId("minuteTaker").setWidth('200')
       for (var i = 0 ; i < councilMembers.length; i++) {
        minuteTaker.addItem(councilMembers.valueOf()[i]);
                        }
      
      var dateBox = app.createDateBox().setId('dateBox').setName('dateBox').setFireEventsForInvalid(false);
      var hour = app.createListBox(false).setId('hour').setName('hour')
    //  var hour = app.createListBox(false).setId('hour').setName('hour')
      for(h=1;h<13;++h){hour.addItem(h)}
      var min = app.createListBox(false).setId('minute').setName('minute')
      .addItem('00').addItem('15').addItem('30').addItem('45'); 
      var amPm = app.createListBox(false).setId('am').setName('amPm')
      .addItem('AM').addItem('PM');  
      var dateTimeLabel = app.createLabel('',false).setId('dateTimeLabel');
      var submit = app.createButton('Create Minutes').setId('submit').setPixelSize(196, 25);
      var nextSteps = app.createAnchor('Please click here to see the minutes archive.', 'https://drive.google.com/xxxxxxxxxx/folderview?xxxxxxxxxx').setId('nextSteps').setVisible(false);
       
    // Setup error message 
      var warnException =app.createImage('https://sites.google.com/xxxxxxxxxx/minutes/create-new-minutes/Opps.png').setId('warnException').setVisible(false);
      var warnExceptionMes = app.createLabel('The date and Location are required. Please try again.').setStyleAttribute('font-weight', 'normal').setStyleAttribute('font-size','14px').setVisible(false);
    
    // handlers
      var handler1 = app.createClientHandler()
      .validateLength(location, 0, 50).validateMatches(dateBox, '2', 'g')
      .forTargets(warnException).setVisible(true)
      .forTargets(warnExceptionMes).setVisible(true);
     
      var handler2 = app.createServerHandler('handlerFunction')
      .validateLength(location, 1, 100).validateNotMatches(dateBox, '2', 'g')
      .addCallbackElement(location).addCallbackElement(dateBox).addCallbackElement(hpanel);
       
      submit.addClickHandler(handler1).addClickHandler(handler2);
       
      hpanel.setWidget(0,0,app.createLabel('Select Date'))
       .setWidget(0,1,app.createLabel('Hour'))
       .setWidget(0,2,app.createLabel('Minutes'))
       .setWidget(0,3,app.createLabel('AM/PM'))
       .setWidget(0,4,app.createLabel('Location'))
       .setWidget(0,5,app.createLabel('Minute Taker'))
       
      hpanel.setWidget(1,0,dateBox)
       .setWidget(1,1,hour)
       .setWidget(1,2,min)
       .setWidget(1,3,amPm)
       .setWidget(1,4,location)
       .setWidget(1,5,minuteTaker)
      
       hpanel.setWidget(2,5,submit)
       app.add(hpanel);//.add(warnException).add(warnExceptionMes);
      
      hpanelException.setWidget(1,1,warnException).setStyleAttribute("text-align", "right")
       .setWidget(1,2,warnExceptionMes)
      // .setWidget(1,2,nextSteps)
       app.add(hpanelException);
       return app;
         }
    
    
    function handlerFunction(e) {
     var app = UiApp.getActiveApplication();
     app.getElementById('submit').setText('Building, please wait...').setEnabled(false);
       
      var location = e.parameter.location; 
      var determineName = e.parameter.minuteTaker;  
      var date = e.parameter.dateBox;
      var timeZone = date.toString().substr(25,6)+":00";  
      var dateMilli = date.getTime();  
      var hour = parseInt(e.parameter.hour);  
      var amPm = e.parameter.amPm;
      if (amPm == 'PM' && hour != 12) hour = hour + 12;  
      if (hour == 12 && amPm == 'AM') hour = 0;  
      var hourMilli = hour * 3600000;  
      var minMilli = parseInt(e.parameter.minute) * 60000;  
      var milliTotal = dateMilli + hourMilli + minMilli; 
    
      // create custom format
      var newDate = Utilities.formatDate(new Date(milliTotal), timeZone, 'MM/dd/yy hh:mm aaa');
      app.getElementById('dateTimeLabel').setText(newDate);
    
      // make a copy of the minutes template to use
      var duplicateID = DriveApp.getFileById(templateIDToCopy)
      .makeCopy('Simply Minutes v1.0 - Stage 1: Building new minutes...')
     .getId();
    
    // get the id of the annual folder where minutes will be stored
      var getFolderID = DriveApp.getFolderById(folderIDtoCopyTo);
    
    // copy new minutes sheet to the annual folder where minutes are stored
      var moveIT = DriveApp.getFileById(duplicateID).makeCopy('Simply Minutes v1.0 - Stage 2: Building new minutes...', getFolderID).getId();
    
    // get the new minutes doc that was created
      var template = DocumentApp.openById(moveIT);
      var templateHeader = template.getHeader();
      var templateBody = template.getActiveSection();
    
    // fill in the values
      templateHeader.replaceText("<date>", newDate);
      templateBody.replaceText("<date>", newDate);
      templateHeader.replaceText("<location>", location);
      templateBody.replaceText("<location>", 'N/A');
      var email = Session.getEffectiveUser().getEmail();
      var eUser = Session.getEffectiveUser().getUsername();
      var createdBy = '';
      
      if(ContactsApp.getContact(email)){     
         var fullName = ContactsApp.getContact(email).getFullName();
         createdBy = fullName;
      }
      else {
         createdBy = 'N/A';
      };
      
      var determineName = e.parameter.minuteTaker;
      templateHeader.replaceText("<minutetaker>", determineName);
      templateHeader.replaceText("<createdby>", createdBy)
      templateBody.replaceText("<minutetaker>", determineName);
      templateBody.replaceText("<createdby>", createdBy); 
      template.setName(newDate + ' TAC Minutes Recorded By ' + determineName);
      
    // close out the doc
      template.saveAndClose();
      
      
      // remove the copy that was left in the root directory
     
     //  DriveApp.getFileById(duplicateID).isTrashed();
       DriveApp.getFileById(duplicateID).setTrashed(true);
      
      app = UiApp.getActiveApplication();
      app.getElementById('submit').setText('Completed!').setEnabled(false);
      app.getElementById('nextSteps').setVisible(true);
      return app;
        }
     
    
    var templateIDToCopy='xxxxxxxxx';
    var folderIDtoCopyTo='xxxxxxxxx';
    var councilemembers=['Unknown'、'Name 1'、'Name 2'];
    函数doGet(e){
    var text=新数组();
    var app=UiApp.createApplication();
    var hpanel=app.createGrid(4,6).setId('pannel');
    var hpanelException=app.createGrid(2,3).setId('hpanelException');
    var location=app.createTextBox().setName('location').setId('location').setWidth('200');
    var minuteTaker=app.createListBox().setName('minuteTaker').setId('minuteTaker').setWidth('200'))
    for(var i=0;i
    您还必须添加一些内容来清除服务器处理程序中的警告,为什么不将图像和文本警告合并到一个小部件中?(更容易清理)

    代码如下:

    function doGet(e) {
      var text= new Array();
      var app = UiApp.createApplication();
      var hpanel = app.createGrid(4, 6).setId('pannel');
      var clearHandler = app.createClientHandler().forEventSource().setVisible(false)
      var hpanelException = app.createGrid(2,3).setId('hpanelException');
      var location = app.createTextBox().setName('location').setId("location").setWidth('200');
      var minuteTaker = app.createListBox().setName('minuteTaker').setId("minuteTaker").setWidth('200')
       for (var i = 0 ; i < councilMembers.length; i++) {
        minuteTaker.addItem(councilMembers.valueOf()[i]);
                        }
    
      var dateBox = app.createDateBox().setId('dateBox').setName('dateBox').setFireEventsForInvalid(false);
      var hour = app.createListBox(false).setId('hour').setName('hour')
    //  var hour = app.createListBox(false).setId('hour').setName('hour')
      for(h=1;h<13;++h){hour.addItem(h)}
      var min = app.createListBox(false).setId('minute').setName('minute')
      .addItem('00').addItem('15').addItem('30').addItem('45'); 
      var amPm = app.createListBox(false).setId('am').setName('amPm')
      .addItem('AM').addItem('PM');  
      var dateTimeLabel = app.createLabel('',false).setId('dateTimeLabel');
      var submit = app.createButton('Create Minutes').setId('submit').setPixelSize(196, 25);
      var nextSteps = app.createAnchor('Please click here to see the minutes archive.', 'https://drive.google.com/xxxxxxxxxx/folderview?xxxxxxxxxx').setId('nextSteps').setVisible(false);
    
    // Setup error message 
      var warnException =app.createImage('https://sites.google.com/xxxxxxxxxx/minutes/create-new-minutes/Opps.png').setId('warnException').setVisible(false).addClickHandler(clearHandler);
      var warnExceptionMes = app.createLabel('The date and Location are required. Please try again.').setStyleAttribute('font-weight', 'normal').setStyleAttribute('font-size','14px').setVisible(false).addClickHandler(clearHandler);
    
    // handlers
      var handler0 = app.createClientHandler()
      .validateLength(location, 0, 5)
      .forTargets(warnException).setVisible(true)
      .forTargets(warnExceptionMes).setVisible(true);
      var handler1 = app.createClientHandler()
      .validateNotMatches(dateBox, '2', 'g')
      .forTargets(warnException).setVisible(true)
      .forTargets(warnExceptionMes).setVisible(true);
    
      var handler2 = app.createServerHandler('handlerFunction')
      .validateLength(location, 6, 100).validateMatches(dateBox, '2', 'g')
      .addCallbackElement(location).addCallbackElement(dateBox).addCallbackElement(hpanel);
    
      submit.addClickHandler(handler0).addClickHandler(handler1).addClickHandler(handler2);
    
      hpanel.setWidget(0,0,app.createLabel('Select Date'))
       .setWidget(0,1,app.createLabel('Hour'))
       .setWidget(0,2,app.createLabel('Minutes'))
       .setWidget(0,3,app.createLabel('AM/PM'))
       .setWidget(0,4,app.createLabel('Location'))
       .setWidget(0,5,app.createLabel('Minute Taker'))
    
      hpanel.setWidget(1,0,dateBox)
       .setWidget(1,1,hour)
       .setWidget(1,2,min)
       .setWidget(1,3,amPm)
       .setWidget(1,4,location)
       .setWidget(1,5,minuteTaker)
    
       hpanel.setWidget(2,5,submit)
       app.add(hpanel);//.add(warnException).add(warnExceptionMes);
    
      hpanelException.setWidget(1,1,warnException).setStyleAttribute("text-align", "right")
       .setWidget(1,2,warnExceptionMes)
      // .setWidget(1,2,nextSteps)
       app.add(hpanelException);
       return app;
         }
    
    函数doGet(e){
    var text=新数组();
    var app=UiApp.createApplication();
    var hpanel=app.createGrid(4,6).setId('pannel');
    var clearHandler=app.createClientHandler().forEventSource().setVisible(false)
    var hpanelException=app.createGrid(2,3).setId('hpanelException');
    var location=app.createTextBox().setName('location').setId('location').setWidth('200');
    var minuteTaker=app.createListBox().setName('minuteTaker').setId('minuteTaker').setWidth('200'))
    for(var i=0;i对于(h=1;hHUGE谢谢你Serge。我真的很感谢你在这方面的帮助。这一点真的让我很困惑。因此,我仍然没有得到的一件事是如何让提交按钮在满足验证后做2件事…1-将按钮上的文本更改为“Building…”并禁用按钮。我知道我可以在我的函数handlerFunction(e)中完成它但我需要在这之前显示它,否则在所有代码完成之前它不会更新。还不确定如何将警告消息的图像和文本作为一个整体进行设置?//设置错误消息var warnException=app.createImage(';var warnexceptions=app.createLabel(“需要日期和位置。请重试”。).setStyleAttribute('font-weight','normal')。setStyleAttribute('font-size','14px')。setVisible(false)。addClickHandler(clearHandler);感谢您的拒绝…非常荣幸。我回答了您的问题,并提供了一个示例+代码,如果您在这两个问题之间进行更改…我不懂。很抱歉,这是错误的。我认为我点击了向上箭头。新到该网站。我非常感谢您的帮助。
    
    var templateIDToCopy = 'xxxxxxxxxx';
    var folderIDtoCopyTo = 'xxxxxxxxxx';
    var councilMembers = ['Unknown','Name 1','Name 2'];
    
    function doGet(e) {
      var text= new Array();
      var app = UiApp.createApplication();
      var hpanel = app.createGrid(4, 6).setId('pannel');
      var hpanelException = app.createGrid(2,3).setId('hpanelException');
      var location = app.createTextBox().setName('location').setId("location").setWidth('200');
      var minuteTaker = app.createListBox().setName('minuteTaker').setId("minuteTaker").setWidth('200')
       for (var i = 0 ; i < councilMembers.length; i++) {
        minuteTaker.addItem(councilMembers.valueOf()[i]);
                        }
    
      var dateBox = app.createDateBox().setId('dateBox').setName('dateBox').setFireEventsForInvalid(false);
      var hour = app.createListBox(false).setId('hour').setName('hour')
    //  var hour = app.createListBox(false).setId('hour').setName('hour')
      for(h=1;h<13;++h){hour.addItem(h)}
      var min = app.createListBox(false).setId('minute').setName('minute')
      .addItem('00').addItem('15').addItem('30').addItem('45'); 
      var amPm = app.createListBox(false).setId('am').setName('amPm')
      .addItem('AM').addItem('PM');  
      var dateTimeLabel = app.createLabel('',false).setId('dateTimeLabel');
      var submit = app.createButton('Create Minutes').setId('submit').setPixelSize(195, 65);
      var nextSteps = app.createAnchor('Please click here to see the minutes archive.', 'https://drive.google.com/xxxxxxxxxx/folderview?xxxxxxxxxx').setId('nextSteps').setVisible(false);
    
      var clearHandler = app.createClientHandler();
    
    // Setup error message 
      var warnException =app.createImage('https://dl.dropboxusercontent.com/u/211279/clock_e0.gif').addClickHandler(clearHandler);
      var warnExceptionMes = app.createLabel('The date and Location are required. Please try again.').setStyleAttribute('font-weight', 'normal').setStyleAttribute('font-size','14px').addClickHandler(clearHandler);
      var warnPanel = app.createHorizontalPanel().add(warnException).add(warnExceptionMes).setId('warning').setVisible(false);
    
      clearHandler.forTargets(warnPanel).setVisible(false);
    // handlers
      var handler0 = app.createClientHandler()
      .validateLength(location, 0, 5)
      .forTargets(warnPanel).setVisible(true)
    
      var handler1 = app.createClientHandler()
      .validateNotMatches(dateBox, '2', 'g')
      .forTargets(warnPanel).setVisible(true)
    
      var handler2 = app.createClientHandler()
      .validateLength(location, 6, 100).validateMatches(dateBox, '2', 'g')
      .forEventSource().setText('Server Handler is running...').setEnabled(false)
      .forTargets(warnPanel).setVisible(false);
    
      var handlerS = app.createServerHandler('handlerFunction')
      .validateLength(location, 6, 100).validateMatches(dateBox, '2', 'g')
      .addCallbackElement(location).addCallbackElement(dateBox).addCallbackElement(hpanel);
    
      submit.addClickHandler(handler0).addClickHandler(handler1).addClickHandler(handler2).addClickHandler(handlerS);
    
      hpanel.setWidget(0,0,app.createLabel('Select Date'))
       .setWidget(0,1,app.createLabel('Hour'))
       .setWidget(0,2,app.createLabel('Minutes'))
       .setWidget(0,3,app.createLabel('AM/PM'))
       .setWidget(0,4,app.createLabel('Location'))
       .setWidget(0,5,app.createLabel('Minute Taker'))
    
      hpanel.setWidget(1,0,dateBox)
       .setWidget(1,1,hour)
       .setWidget(1,2,min)
       .setWidget(1,3,amPm)
       .setWidget(1,4,location)
       .setWidget(1,5,minuteTaker)
    
      hpanel.setWidget(2,5,submit)
      app.add(hpanel);
    
      hpanelException.setWidget(1,1,warnPanel).setStyleAttribute("text-align", "right")
      app.add(hpanelException);
      return app;
    }
    
    
    function handlerFunction(e) {
      var app = UiApp.getActiveApplication();
      Utilities.sleep(1000);
      app.getElementById('submit').setText('SERVER HANDLER is DONE');
    //  app.getElementById('warning').setVisible(false);// not necassary anymore, see clientHandler2
      return app;
        }