2

Google Apps Scripts を使用して GUI をコーディングしています。txtLastName などのテキスト ボックスがあり、null 値を検出するクライアント ハンドラーを追加したいと考えています。本質的に、これを必須フィールドにしたいと思います。

4

1 に答える 1

0

いくつかの可能性があると思いますが、そのうちの1つは長さバリデーターを使用することです

var clientHandler = app.createClientHandler().validateLength(widget, min, max)

これをsetVisible警告メッセージに使用し、最終的に「送信ボタン」を無効にするには...

clientHandlersのドキュメントは非常に明示的です

question 1以下は、警告メッセージをチェックして表示する簡単な形式の例です。

function BuildForm() {
  var text= new Array();
  text =['question 1','question 2','question 3','question 4','question 5','question 6']; 
  var textBox = new Array();    
  var app=UiApp.createApplication().setTitle('Form');
  var panel = app.createVerticalPanel().setId('panel');
  var btn = app.createButton('process');
  var warning = app.createLabel('You forgot to fill in question 1').setVisible(false)
  for (nn=0;nn<text.length;++nn){
    var label = app.createLabel(text[nn]);
    textBox[nn] = app.createTextBox().setName(text[nn].replace(' ',''));
    panel.add(label).add(textBox[nn])
  }
    var cliH1 = app.createClientHandler().validateLength(textBox[0], 0, 1)
        .forTargets(btn).setEnabled(false)
        .forTargets(warning).setVisible(true)
    var cliH2 = app.createClientHandler()
        .forTargets(btn).setEnabled(true)
        .forTargets(warning).setVisible(false)

  var servH = app.createServerHandler('process').addCallbackElement(panel).validateLength(textBox[0], 1, 40)
  btn.addClickHandler(cliH1)
  textBox[0].addClickHandler(cliH2)
  btn.addClickHandler(servH)  
  panel.add(btn).add(warning)
  app.add(panel)
  var doc = SpreadsheetApp.getActive();
  doc.show(app)
}


function process(e){
  var app = UiApp.getActiveApplication()
      Browser.msgBox(e.parameter.question1+'  '+e.parameter.question2+'  '+e.parameter.question3+'  '+e.parameter.question4+'  '+e.parameter.question5+'  '+e.parameter.question6)
      app.close()
      return app
          }

EDIT : 別の検証 (validateMatches) を使用し、すべての回答をチェックする別のバージョンを次に示します。

function BuildForm2() {
  var text= new Array();
  text =['question 1','question 2','question 3','question 4','question 5','question 6']; 
  var textBox = new Array();    
  var app=UiApp.createApplication().setTitle('Form');
  var panel = app.createVerticalPanel().setId('panel');
  var btn = app.createButton('process').setWidth('240');
  var warning = app.createLabel('You forgot to fill at least one question').setVisible(false)
  for (nn=0;nn<text.length;++nn){
    var label = app.createLabel(text[nn]);
    textBox[nn] = app.createTextBox().setName(text[nn].replace(/ /g,''));
    panel.add(label).add(textBox[nn])
  }
  var servH = app.createServerHandler('process').addCallbackElement(panel).validateLength(textBox[0], 1, 40).validateLength(textBox[1], 1, 40).validateLength(textBox[2], 1, 40)
      .validateLength(textBox[3], 1, 40).validateLength(textBox[4], 1, 40).validateLength(textBox[5], 1, 40);
  var cliH = app.createClientHandler().validateMatches(textBox[0],'').validateMatches(textBox[1],'').validateMatches(textBox[2],'').validateMatches(textBox[3],'')
      .validateMatches(textBox[4],'').validateMatches(textBox[5],'')
        .forTargets(warning).setVisible(true)
  btn.addClickHandler(servH).addClickHandler(cliH)  
  panel.add(btn).add(warning)
  app.add(panel)
  var doc = SpreadsheetApp.getActive();
  doc.show(app)
}
于 2012-07-06T15:58:30.643 に答える