2013-02-07 45 views
0

我正在使用Google雲端硬盤表單來驗證輸入並在提交後發送電子郵件。問題是將處理程序附加到Google創建的表單控件。一些tutorials創建控件並將它們添加到UiApp的一個實例,並在附加處理程序後從該函數返回該對象。我已經嘗試過在窗體打開時調用這樣的函數,但它不起作用,但是我可以像這樣在提交時調用函數。Google雲端硬盤表單數據驗證

function sendFormByEmail(e) 
{ 
    var email = "[email protected]"; 
    var subject = "Form Results"; 
    var message = ""; for(var field in e.namedValues) 
    { 
    message += field + ' :: ' + e.namedValues[field].toString() + "\n\n"; 
    } 
    MailApp.sendEmail(email, subject, message); 

} 

但是,我想做客戶端和服務器端驗證。想到我的腦海中,我只會看到HTML具有哪些控件屬性,也許我可以通過這種方式找到控件,但我不知道Google不會更改id,class或在這個問題上任何時候的名字。這裏是我最後使用的代碼並返回了UiApp的一個實例,但我更願意抓住這些控制器,並與他們一起實現。

function doGet(){ 
    //create app 
    var app = UiApp.createApplication(); 
    //controls 
    var txtbAccountNumber = app.createTextBox().setId('tbAccountNumber').setName('tbnAccountNumber'); 
    var txtbOwnerEmail = app.createTextBox().setId('tbOwnerEmail').setName('tbnOwnerEmail'); 
    var txtbAccountAdjustment = app.createTextBox().setId('tbAccountAdjustment').setName('tbnAccountAdjustment'); 
    var btnSubmit = app.createButton("Submit").setEnabled(false); 
    var lblEmailFailed = app.createLabel("The email was not valid"); 
    var lblAccountNumber = app.createLabel("The account number was not valid"); 
    var lblAccountAdjustment = app.createLabel("The account adjustment was not valid"); 
    //handler for submit click 
    var handler = app.createServerHandler("validateInput") 
    .validateEmail(txtbOwnerEmail) 
    .validateNumber(txtbAccountNumber) 
    .validateNumber(txtbAccountAdjustment) 
    .addCallbackElement(txtbAccountNumber) 
    .addCallbackElement(txtbOwnerEmail) 
    .addCallbackElement(txtbAccountAdjustment); 

    //callback control handlers 
    var validEmail = app.createClientHandler() 
    .validateEmail(txtbOwnerEmail) 
    .forTargets(txtbOwnerEmail) 
    .setStyleAttribute("color","black") 
    .forTargets(btnSubmit) 
    .setEnabled(true) 
    .forTargets(lblEmailFailed) 
    .setVisible(false); 

    var validAccountNumber = app.createClientHandler() 
    .validateNumber(txtbAccountNumber) 
    .forTargets(txtbAccountNumber) 
    .setStyleAttribute("color","black") 
    .forTargets(btnSubmit) 
    .setEnabled(true) 
    .forTargets(lblAccountNumber) 
    .setVisible(false); 

    var validAccountAdjustment = app.createClientHandler() 
    .validateNumber(txtbAccountAdjustment) 
    .forTargets(txtbAccountAdjustment) 
    .setStyleAttribute("color","black") 
    .forTargets(btnSubmit) 
    .setEnabled(true) 
    .forTargets(lblAccountAdjustment) 
    .setVisible(false); 

    var invalidEmail = app.createClientHandler() 
    .validateEmail(txtbOwnerEmail) 
    .forTargets(txtbOwnerEmail) 
    .setStyleAttribute("color","red") 
    .forTargets(btnSubmit) 
    .setEnabled(false) 
    .forTargets(lblEmailFailed) 
    .setVisible(true); 

    var invalidAccountNumber = app.createClientHandler() 
    .validateNumber(txtbAccountNumber) 
    .forTargets(txtbAccountNumber) 
    .setStyleAttribute("color","red") 
    .forTargets(btnSubmit) 
    .setEnabled(false) 
    .forTargets(lblAccountNumber) 
    .setVisible(true); 

    var invalidAccountAdjustment = app.createClientHandler() 
    .validateNumber(txtbAccountAdjustment) 
    .forTargets(txtbAccountAdjustment) 
    .setStyleAttribute("color","red") 
    .forTargets(btnSubmit) 
    .setEnabled(false) 
    .forTargets(lblAccountAdjustment) 
    .setVisible(true); 

    txtbOwnerEmail.addBlurHandler(validEmail); 
    txtbOwnerEmail.addBlurHandler(invalidEmail); 
    txtbAccountNumber.addBlurHandler(validAccountNumber); 
    txtbAccountNumber.addBlurHandler(invalidAccountNumber); 
    txtbAccountAdjustment.addBlurHandler(validAccountAdjustment); 
    txtbAccountAdjustment.addBlurHandler(invalidAccountAdjustment); 
    btnSubmit.addClickHandler(handler); 

    app.add(txtbOwnerEmail); 
    app.add(txtbAccountNumber); 
    app.add(txtbAccountAdjustment); 
    app.add(lblEmailFailed); 
    app.add(lblAccountNumber); 
    app.add(lblAccountAdjustment); 

    return app; 
} 

function validateInput(e){ 
var app = UiApp.getActiveApplication(); 
    var pattern = /^[a-zA-Z0-9._][email protected][a-zA-Z0-9._]+\.[a-zA-Z0-9._]{2,4}/; 
    return pattern.test(e.parameter.txtbOwnerEmail); 
} 

如何附加處理程序並驗證Google Doc生成的表單的字段?

回答

0

這是不可能的。你必須使用UiApp或HtmlService自己創建一個表單。您目前可以與Google表單進行的唯一交互是您可以綁定到onFormSubmit()。

+0

嗯,我認爲這是可能的,但它會需要很多額外的JavaScript,並有點破解。 – Jarealist