![](/img/trans.png)
[英]Call javascript function from html file in google apps script
[英]How to call function from server in Google Apps Script?
我正在使用GAS将表单嵌入Google电子表格的边栏中。
表单提交并由用户确认后,如何关闭此侧边栏?
验证是在将数据发送到服务器之前完成的。 之后,用户必须使用“是/否”警报框确认他要提交表单。
如果他单击“是”:侧边栏关闭,数据已提交
如果他单击否:侧栏保持打开状态,并且什么也没有发生。
在code.gs中:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Test')
.addItem('New Test', 'showSidebar')
.addToUi()
}
function include (file) {
return HtmlService.createTemplateFromFile(file).evaluate().getContent();
}
function showSidebar() {
var html = HtmlService.createTemplateFromFile('Page')
.evaluate()
.setTitle('Sidebar')
.setWidth(200);
SpreadsheetApp.getUi()
.showSidebar(html);
}
function processF(form){
var ui = SpreadsheetApp.getUi();
var result = ui.alert(
'Please confirm',
ui.ButtonSet.YES_NO);
if (result == ui.Button.YES) {
Browser.msgBox('Yes');
return true;
} else{
return false;
//throw new Error( "Optional message" );
}
}
在html中:
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<script>
function validar(){
try{
var form=document.getElementById('configs');
if(!document.getElementById('nome').value || !document.getElementById('datepicker').value){
return false;
} else {
this.disabled=true;
google.script.run
//.withFailureHandler(google.script.host.close)
.withSuccessHandler(function(closeTF){
if(closeTF==true){
google.script.host.close();
}
}).processF(form);
//google.script.host.close();
}
} catch(e){
alert('Erro: '+e.message);
}
};
</script>
<div class="painel">
<form id="configs" action="#">
<fieldset>
<label>Name</label>
<p><input type="text" name="nome" id="nome" minlength="2" required/></p>
<label>1-Choose date:</label>
<p><input type="text" name="datepicker" id="datepicker" required/></p>
<label>2-Choose:</label>
<p>
<select name="horizonte" id="horizonte">
<option value=1>1 Month</option>
<option value=2>2 Months</option>
<option value=3 selected="selected">3 Months</option>
<option value=6>6 Months</option>
</select>
</p>
<label>3-Choose:</label>
<p>
<select name="relatorio" id="relatorio">
<option value=1>Week</option>
<option value=2>Month</option>
</select>
</p>
<p>
<input type="submit" id="enviar" value="Submit" onclick="validar()" />
</p>
</fieldset>
</form>
</div>
<?!= include('Javascript'); ?>
使用此代码,无论用户单击“是”还是“否”,边栏始终处于关闭状态。
更新的答案
感谢其余的代码@NunoNogueira。 我已经花了很多时间进行试验,并且确信问题出在使用alert
。 这可能与Issue 4428有关 ,但我不确定。 警报很可能覆盖了一些窗口上下文信息。 清楚的是,服务器正在将undefined
的返回给successHandler,因此它在客户端无用。 我的建议是在此工作流程中放弃使用alert
。
如果您在确认表单之前坚持要求确认,则可以在客户端上使用confirm()
:
function validar(){
if (!confirm("Por favor, confirme")) return;
...
原始答案-正确的信息,但不是问题所在。
return false
的调用将触发successHandler
,因为它是一个return
。
要改为调用failureHandler
,服务器功能必须FAIL 。 而不是return
:
throw new Error( "Optional message" );
...然后在您的HTML代码中添加一个failureHandler
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.