У меня есть шаблон листа Google. Каждый раз, когда он открывается, я хотел бы открыть диалоговое окно, чтобы получить два параметра и передать эти параметры в сценарий, связанный с шаблоном листа Google. До сих пор мне удалось определить и открыть диалог. Но параметры не отображаются в сценарии на стороне сервера.
Кажется, что readFormData не вызывается, когда я нажимаю кнопку "Создать". Если я заменю readFormData на google.script.host.close (), диалоговое окно закроется. Но не с readFormData. Та же проблема идет с close (). Поэтому я считаю, что скрипт Java не выполняется.
РЕДАКТИРОВАТЬ: я решил проблему с обходным путем. Я заменил onclick = "readFormData" на onclick = "google.script.run.withSuccessHandler (google.script.host.close) .getFormData (this.parentNode)", а затем все работает как положено. (также потребовалось внести некоторые изменения на стороне GS). Однако я не могу понять, почему я не могу вызвать свою собственную процедуру JavaScript JavaScript readFormData (). С помощью справочной формы Chrome Developer Tool я могу заметить, что readFormData не определен, вызывая исключение «Uncaught ReferenceError: readFormData не определен». Он срабатывает каждый раз, когда я нажимаю на кнопку. Таким образом, я предполагаю, что это должна быть синтаксическая ошибка, которая обманывает анализатор или подобное.
GS:
function getFormData(obj) {
Logger.log(obj);
return "hello";
}
function openDialog() {
var html = HtmlService.createHtmlOutputFromFile('index');
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.showModalDialog(html, 'Create file');
}
function onOpen(e) {
openDialog();
}
HTML:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link rel="stylesheet"
href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>
<body>
<form id="getSomeData">
<div class="inline form-group">
<label for="fname">Destination</label>
<input type="text" name="fname" style="width: 150px;">
</div>
<div class="inline form-group">
<label for="date">Date</label>
<input type="text" name="date" style="width: 40px;">
</div>
<div>
<input type="button" class = "action" value= "Create" onclick="readFormData()" >
</div>
</form>
<!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> -->
<script>
function success(msg) { // I have fixed the ((msg) error
alert(msg);
}
function readFormData(){
console.log("readFormData");
var form = document.getElementById("getSomeData").elements;
var obj ={};
for(var i = 0 ; i < form.length ; i++){
var item = form.item(i);
obj[item.name] = item.value;
}
google.script.run.withSuccessHandler(close).getFormData(obj);
}
function close(){
google.script.host.close();
}
</script>
</body>
</html>