有没有办法在填写表格时关闭用户的自动填充?

时间:2012-08-25 18:22:52

标签: google-apps-script

我认为这对你来说很快,伙计们:

我正在以UiApp构建的形式收集数据,并在启用它们之前使用验证。我的问题是,通常自动填充的格式与我的表单中所需的格式不同(例如写出的状态而不是邮政缩写)。我认为这可能导致混淆,所以我想强迫用户手动填写每个盒子。

有没有办法关闭浏览器的自动填充功能? 如果我要用html构建,它能让我更好地控制它吗?

感谢您的帮助〜 马丁

注意:我正在使用“ChangeHandler”,因为它会在使用自动填充时至少更新验证器。

这是一个我正在使用的样式的示例代码。它包括多个字段验证和审核小组。与我的问题相关,但也可能对那些建筑形式有用。

function doGet(e){
var app = UiApp.createApplication().setTitle("Review and Validation");
var appPanel = app.createVerticalPanel();
var form = app.createFormPanel();
var panel1 = app.createGrid(4,5).setId('panel1');

var firstNameLabel = app.createLabel("First Name:");
var firstName = app.createTextBox().setName('firstName').setId('firstName');
var lastNameLabel = app.createLabel("Last Name:");
var lastName = app.createTextBox().setName('lastName').setId('lastName');
var emailLabel = app.createLabel('Your Email');
var email = app.createTextBox().setName('email').setId('email');
var button1 = app.createButton('Go to Review').setEnabled(false);
var info1 = app.createLabel("Please Enter First Name")
.setVisible(false)
.setStyleAttribute('color', 'red');
var info2 = app.createLabel("Please Enter Last Name")
.setVisible(false)
.setStyleAttribute('color', 'red');
var info3 = app.createLabel("Please Enter Email")
.setVisible(false)
.setStyleAttribute('color', 'red');


var syncChangeHandler = app.createServerHandler('syncText').addCallbackElement(form)
.validateLength(firstName, 2, 30).validateLength(lastName, 2, 30).validateEmail(email);

var onValidInput = 
app.createClientHandler().validateLength(firstName,2,30).validateLength(lastName,2,30).validateEmail(email).forTargets(
      button1).setEnabled(true);

var onInvalidInput1 = 
app.createClientHandler().validateNotLength(firstName, 2, 30).forTargets(button1).setEnabled(false).forTargets(info1).setVisible(true);

var onValidInput1 = 
app.createClientHandler().validateLength(firstName, 2, 30).forTargets(info1).setVisible(false);

var onInvalidInput2 = 
app.createClientHandler().validateNotLength(lastName, 2, 30).forTargets(button1).setEnabled(false).forTargets(info2).setVisible(true);

var onValidInput2 = 
app.createClientHandler().validateLength(lastName, 2, 30).forTargets(info2).setVisible(false);

var onInvalidInput3 = 
app.createClientHandler().validateNotEmail(email).forTargets(button1).setEnabled(false).forTargets(info3).setVisible(true);

var onValidInput3 = 
app.createClientHandler().validateEmail(email).forTargets(info3).setVisible(false);

firstName.addChangeHandler(onInvalidInput1);
firstName.addChangeHandler(onValidInput1);

lastName.addChangeHandler(onInvalidInput2);
lastName.addChangeHandler(onValidInput2);

email.addChangeHandler(onInvalidInput3);
email.addChangeHandler(onValidInput3);

firstName.addChangeHandler(onValidInput);
lastName.addChangeHandler(onValidInput);
email.addChangeHandler(onValidInput);

panel1.setWidget(0,0, firstNameLabel);
panel1.setWidget(0,1, firstName);
panel1.setWidget(0,2, lastNameLabel);
panel1.setWidget(0,3, lastName);
panel1.setWidget(1,1, info1);
panel1.setWidget(1,3, info2);
panel1.setWidget(2,0, emailLabel);
panel1.setWidget(2,1, email);
panel1.setWidget(2,3, button1);
panel1.setWidget(3,1, info3);

app.add(form);
appPanel.add(panel1);
form.add(appPanel);


var panel2 = app.createGrid(4,5).setId('panel2').setVisible(false);
var reviewFirstNameLabel = app.createLabel("First Name:");
var reviewFirstName = app.createLabel().setId('reviewFirstName');
var reviewLastNameLabel = app.createLabel("Last Name:");
var reviewLastName = app.createLabel().setId('reviewLastName');
var reviewEmailLabel = app.createLabel('Your Email:');
var reviewEmail = app.createLabel().setId('reviewEmail');
var submitButton = app.createSubmitButton('Submit');
var button2 = app.createButton('Edit Response');

panel2.setWidget(0,0, reviewFirstNameLabel); 
panel2.setWidget(0,1, reviewFirstName); 
panel2.setWidget(0,2, reviewLastNameLabel);
panel2.setWidget(0,3, reviewLastName);
panel2.setWidget(1,0, reviewEmailLabel);
panel2.setWidget(1,1, reviewEmail);
panel2.setWidget(2,0, button2);
panel2.setWidget(3,0, submitButton);
appPanel.add(panel2);

//
var editResponse = app.createClientHandler()
.forTargets(panel1).setVisible(true)
.forTargets(panel2).setVisible(false);

button1.addClickHandler(syncChangeHandler);
button2.addClickHandler(editResponse);

return app;
}

function syncText(e){
  var app = UiApp.getActiveApplication(); 


  app.getElementById('reviewFirstName').setText(e.parameter.firstName);
  app.getElementById('reviewLastName').setText(e.parameter.lastName);
  app.getElementById('reviewEmail').setText(e.parameter.email);
  app.getElementById('panel1').setVisible(false);
  app.getElementById('panel2').setVisible(true);
  return app;
}

function doPost(e){
var ss = SpreadsheetApp.openById('0Aiapuj1KtAujdHYzZzNzMEsxMUtranZhaXhiSFFnanc').getSheets()[0];
var range = ss.getRange(ss.getLastRow()+1, 1, 1,4);

var values = [[new Date(),e.parameter.firstName, e.parameter.lastName, e.parameter.email]];
range.setValues(values);

var app = UiApp.getActiveApplication();
var label = app.createLabel('Thank You!');
app.add(label);

return app;
}

1 个答案:

答案 0 :(得分:0)

GAS是全球浏览器独立的,因为该应用程序在Google的服务器上运行,并且不直接与您的浏览器交互...我认为不可能告诉浏览器做这样的事情而我没有看到任何可能使这种可能的伎俩...如果我错了,那我就会很好奇; - )

编辑:我玩了你的代码,我想知道它是否可能不是使用按键处理程序而不是单击处理程序的解决方案,因此用户将被迫使用键盘来填充表单而不是鼠标单击。我看过脚本,检查是否按下'enter'来验证答案。 (只是一个想法) 编辑2:嗯,浏览器太聪明了,我测试了它,但自动完成模拟按键很有效...太糟糕了: - /