我疯了。我已经发布了多个问题,这些问题都源于此。我有一个正在显示modalDialog的HtmlService。
用户从此处从下拉菜单中选择内容。然后,JS代码将数据服务器端提交到可以记录该数据的函数。
大!但是我需要能够使用从下拉列表中选择的数据从另一个函数中调用该函数。
我曾经(令人惊讶)有人来帮助我,并在这方面的不同方面为我提供了指导,但是最后,我没有得到有效的回应。
html文件:
<html>
<head>
<base target="_top">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>
<body>
<form>
<select id="dropJob" name="dropdown">
<option value=""></option>
</select>
<br>
<br>
<input type="submit" value="Submit" class="action" onclick="sendData()" />
<input type="button" value="Close" onclick="google.script.host.close()" />
</form>
<script>
$(function() {
$('#dropJob').val('');
google.script.run
.withSuccessHandler(updateSelect)
.getSelectOptions();
});
function updateSelect(vA) {//this is where the dropdown gets loaded
var select = document.getElementById("dropJob");
select.options.length = 0;
for(var i=0;i<vA.length;i++)
{
select.options[i] = new Option(vA[i],vA[i]);
}
}
function sendData(){
var value = document.getElementById("dropJob").value;
google.script.run.withSuccessHandler(closeIt).grabData(value);
};
function closeIt(){
google.script.host.close()
};
</script>
</body>
</html>
.GS文件:
function reserveItem() {
var response = ui.prompt("Add to Reservation","Please enter project
name",Browser.Buttons.YES_NO_CANCEL);
if (response.getSelectedButton() == ui.Button.YES) {
var projectname = response.getResponseText();
//Bunch of stuff-not important
}
else if (response.getSelectedButton() == ui.Button.NO){
displayDropdown();
var projectname = PropertiesService.getUserProperties().getProperty('DropJob')
Logger.log(projectname);
**//This is where I need that value from the dropdown**
//build more sheets//update cells//not important
}
}
最后,客户端代码也从下拉菜单发送数据的功能:
function grabData(value) {
return value;
}
这是一个非常接近您的代码的简单示例,并且可以正常工作。我从您的html开始,并修改了一些地方。
代码gs:
function onOpen() {
SpreadsheetApp.getUi().createMenu('My Tools')
.addItem('Start Dialog', 'startDialog')
.addItem('grabData','grabData')
.addToUi();
}
function startDialog() {
var userInterface=HtmlService.createHtmlOutputFromFile('zzzz');
SpreadsheetApp.getUi().showModelessDialog(userInterface, 'zzzz');
}
我从Sheet1 Column1获取选择选项
function getSelectOptions() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');
var rg=sh.getRange(1,1,sh.getLastRow());
var vA=rg.getValues().map(function(r){return r[0];});
return vA;
}
function saveData(v) {
PropertiesService.getScriptProperties().setProperty('DropJob', v);
Logger.log(v);
return v;
}
我记录了离开客户端的v并返回以确保得到它。而且,grapData()仅显示脚本属性的内容,用户属性也可以工作。
function grabData() {
var data=PropertiesService.getScriptProperties().getProperty('DropJob');
SpreadsheetApp.getUi().alert('Current Data is ' + data);
}
的HTML:zzzz.html
<html>
<head>
<base target="_top">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>
<body>
<form>
<select id="dropJob" name="dropdown">
<option value=""></option>
</select>
<br>
<br>
<input type="button" value="Submit" class="action" onClick="sendData();" />
我更改了上面的按钮类型。
<input type="button" value="Close" onclick="google.script.host.close();" />
</form>
<script>
var gv='';
$(function() {
$('#dropJob').val('');
google.script.run
.withSuccessHandler(updateSelect)
.getSelectOptions();
});
function updateSelect(vA) {//this is where the dropdown gets loaded
var select = document.getElementById("dropJob");
select.options.length = 0;
for(var i=0;i<vA.length;i++)
{
select.options[i] = new Option(vA[i],vA[i]);
}
}
function sendData(){
var value = document.getElementById("dropJob").value;
console.log('value: %s',value);
google.script.run
.withSuccessHandler(function(v){
console.log('value: %s',v);
gv=v;//if you want to pass the last selected value back to Javascript
google.script.host.close();
})
.saveData(value);
}
我在上面的SuccessHandler中使用了匿名函数。
console.log('My Code');
</script>
</body>
</html>
有一些更改,因此请仔细查看。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句