最近,我认为(在这个职位 )的脚本来检查,如果一个形式的不同领域,允许提交之前有一个答案,我做到了使用与验证客户端的处理程序。
与脚本我注意到,在某些情况下,提交按钮,即使所有的验证条件未能启用玩耍。 这取决于在一个充满不同的字段的顺序。
需要明确的是:如果您填写的每个字段一个其他一切后,是好的,如果由于某种原因,你改变这个顺序(从末或从中间开始)碰巧的是, fileupload
验证没有考虑到,并且提交按钮被没有被选择的文件中启用。
(写这我知道这是不是那么清楚;-)但看在线测试会告诉我的意思!)
下面是我使用的演示代码,如果你发现有什么错误在里面,解释这种行为,我会很高兴知道。
var submissionSSKey = '0AnqSFd3iikE3dFZ6M1JDekJIa1I5UEZIZURGN3hhM3c';
var listitems = ['Select a value','value1','value2','value3','value4','value5','value6']
var Panelstyle = {'background':'beige','padding':'40px','borderStyle':'ridge','borderWidth':'15PX','borderColor':'#eecc99'}
function doGet() {
var app = UiApp.createApplication().setTitle('Form test').setStyleAttribute('padding','50PX');
var panel = app.createFormPanel().setStyleAttributes(Panelstyle).setPixelSize(400, 250);
var title = app.createHTML('<B>Form validation test</B>').setStyleAttribute('fontSize','20px').setStyleAttribute('color','brown');
var grid = app.createGrid(9,2).setId('grid');
var list1 = app.createListBox().setName('list1');
for(var i in listitems){list1.addItem(listitems[i])}
var list2 = app.createListBox().setName('list2');
for(var i in listitems){list2.addItem(listitems[i])}
var list3 = app.createListBox().setName('list3');
for(var i in listitems){list3.addItem(listitems[i])}
var Textbox1 = app.createTextBox().setWidth('150px').setName('TB1');
var Textbox2 = app.createTextBox().setWidth('150px').setName('TB2');
var DateB = app.createDateBox().setWidth('150px').setName('dateB');
var upLoad = app.createFileUpload().setName('uploadedFile');
var submitButton = app.createSubmitButton('<B>Submit</B>');
var warning = app.createHTML('Please fill in all fields').setStyleAttribute('background','#FFcc99').setStyleAttribute('fontSize','20px');
//file upload
var cliHandler2 = app.createClientHandler()
.validateLength(Textbox1, 1, 40).validateLength(Textbox2, 1, 40).validateNotMatches(list1,'Select a value').validateNotMatches(list2,'Select a value')
.validateNotMatches(list3,'Select a value').validateMatches(DateB, '2','g').validateNotMatches(upLoad, 'FileUpload')
.forTargets(submitButton).setEnabled(true)
.forTargets(warning).setHTML('Now you can submit your form').setStyleAttribute('background','#99FF99').setStyleAttribute('fontSize','12px');
//Grid layout of items on form
grid.setText(0, 0, 'This is a ')
.setWidget(0, 1, title)
.setText(1, 0, 'List Selector 1')
.setWidget(1, 1, list1.addClickHandler(cliHandler2))
.setText(2, 0, 'List Selector 2')
.setWidget(2, 1, list2.addClickHandler(cliHandler2))
.setText(3, 0, 'List Selector 3')
.setWidget(3, 1, list3.addClickHandler(cliHandler2))
.setText(4, 0, 'Text Box 1')
.setWidget(4, 1, Textbox1.addClickHandler(cliHandler2))
.setText(5, 0, 'Text Box 2')
.setWidget(5, 1, Textbox2.addClickHandler(cliHandler2))
.setText(6, 0, 'Date Box')
.setWidget(6, 1, DateB)
.setText(7, 0, 'File Upload')
.setWidget(7, 1, upLoad.addChangeHandler(cliHandler2))
.setWidget(8, 0, submitButton)
.setWidget(8, 1, warning);
var cliHandler = app.createClientHandler().forTargets(warning).setHTML('<B>PLEASE WAIT WHILE DATA IS UPLOADING<B>').setStyleAttribute('background','yellow');
submitButton.addClickHandler(cliHandler).setEnabled(false);
panel.add(grid);
app.add(panel);
return app;
}
function doPost(e) {
var app = UiApp.getActiveApplication();
var ListVal1 = e.parameter.list1;
var ListVal2 = e.parameter.list2;
var ListVal3 = e.parameter.list3;
var textVal1 = e.parameter.TB1;
var textVal2 = e.parameter.TB2;
var dateVal = e.parameter.dateB;
var sheet = SpreadsheetApp.openById(submissionSSKey).getSheetByName('Summary');
var lastRow = sheet.getLastRow();
var targetRange = sheet.getRange(lastRow+1, 1, 1, 6).setValues([[ListVal1,ListVal2,ListVal3,textVal1,textVal2,dateVal]]);
var fileBlob = e.parameter.uploadedFile;
var doc = DocsList.createFile(fileBlob);
app.add(app.createLabel('Thank you for submitting'));
return app
}
编辑:这里是代码的下面菲尔的回答修改的部分。 验证工作更可靠,但仍有一些讨厌的用户友好性缺乏...
代码移除, 编辑2最终代码,完整的doGet:
var submissionSSKey = '0AnqSFd3iikE3dFZ6M1JDekJIa1I5UEZIZURGN3hhM3c';
var listitems = ['Select a value','value1','value2','value3','value4','value5','value6']
var Panelstyle = {'background':'beige','padding':'40px','borderStyle':'ridge','borderWidth':'15PX','borderColor':'#eecc99'}
function doGet() {
var app = UiApp.createApplication().setTitle('Form test').setStyleAttribute('padding','50PX');
var panel = app.createFormPanel().setStyleAttributes(Panelstyle).setPixelSize(400, 250);
var title = app.createHTML('<B>Form validation test</B>').setStyleAttribute('fontSize','20px').setStyleAttribute('color','brown');
var grid = app.createGrid(10,2).setId('grid');
var list1 = app.createListBox().setName('list1');
for(var i in listitems){list1.addItem(listitems[i])}
var list2 = app.createListBox().setName('list2');
for(var i in listitems){list2.addItem(listitems[i])}
var list3 = app.createListBox().setName('list3');
for(var i in listitems){list3.addItem(listitems[i])}
var Textbox1 = app.createTextBox().setWidth('150px').setName('TB1');
var Textbox2 = app.createTextBox().setWidth('150px').setName('TB2');
var DateB = app.createDateBox().setWidth('150px').setName('dateB');
var upLoad = app.createFileUpload().setName('uploadedFile');
var uploadtracker = app.createTextBox().setVisible(false);
var submitButton = app.createSubmitButton('<B>Submit</B>');
var warning = app.createHTML('Please fill in all fields').setStyleAttribute('background','#FFcc99').setStyleAttribute('fontSize','20px');
//file upload
var cliHandler2 = app.createClientHandler()
.validateLength(Textbox1, 1, 40).validateLength(Textbox2, 1, 40).validateNotMatches(list1,'Select a value').validateNotMatches(list2,'Select a value')
.validateNotMatches(list3,'Select a value').validateMatches(DateB, '2','g').validateMatches(uploadtracker, 'selected')
.forTargets(submitButton).setEnabled(true)
.forTargets(warning).setHTML('Now you can submit your form').setStyleAttribute('background','#99FF99').setStyleAttribute('fontSize','12px');
var cliHandler3 = app.createClientHandler().forTargets(uploadtracker).setText('selected')
//Grid layout of items on form
grid.setText(0, 0, 'This is a ')
.setWidget(0, 1, title)
.setText(1, 0, 'List Selector 1')
.setWidget(1, 1, list1)
.setText(2, 0, 'List Selector 2')
.setWidget(2, 1, list2)
.setText(3, 0, 'List Selector 3')
.setWidget(3, 1, list3)
.setText(4, 0, 'Text Box 1')
.setWidget(4, 1, Textbox1)
.setText(5, 0, 'Text Box 2')
.setWidget(5, 1, Textbox2)
.setText(6, 0, 'Date Box')
.setWidget(6, 1, DateB.addValueChangeHandler(cliHandler2))
.setText(7, 0, 'File Upload')
.setWidget(7, 1, upLoad.addChangeHandler(cliHandler3).addChangeHandler(cliHandler2))
.setWidget(8, 0, submitButton)
.setWidget(8, 1, warning)
.setWidget(9,0,uploadtracker)
.addClickHandler(cliHandler2);
var cliHandler = app.createClientHandler().forTargets(warning).setHTML('<B>PLEASE WAIT WHILE DATA IS UPLOADING<B>').setStyleAttribute('background','yellow');
submitButton.addClickHandler(cliHandler).setEnabled(false);
panel.add(grid);
app.add(panel);
return app;
}