gpt4 book ai didi

javascript - 如何从 Google Apps 脚本中的服务器调用函数?

转载 作者:行者123 更新时间:2023-11-30 17:08:51 25 4
gpt4 key购买 nike

我正在使用 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

关于javascript - 如何从 Google Apps 脚本中的服务器调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com