2013-02-07 43 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