我在Google Sheet文件中的HTML UI on命令中弹出了一个表,允许文件的用户查看我的Google Sheet选项卡中列出的订单摘要。该表为列出的每个订单提供了一个单选按钮选择选项,供用户单击他们想要更详细地查看的任何订单。现在,onClick,该文件触发了一个警报,声明选择了哪个订单。这告诉我一切工作正常,但当我将警报代码移出客户端HTML部分并通过google.script.run调用服务器端时,警报不再弹出'onClick‘。如果可以,让我知道我哪里错了:
function htmlOrders() {
var active = SpreadsheetApp.getActive();
var sheet = active.getSheetByName("POHistory");
var lastRow = sheet.getLastRow();
var myRange = sheet.getRange("A2:K" + lastRow);
var data = myRange.getDisplayValues();
var optionsHTML = "";
var seenType = {};
for (var i = 0; i < data.length; i++) {
if(seenType[data[i][0]]) {
continue;}
seenType[data[i][0]] = true;
optionsHTML += "<tr>";
optionsHTML += "<td><input type='radio' name='selectedPO' value='" +
data[i][0] + "'onclick='google.script.run.editPO()';></td>";
optionsHTML += "<td>" + data[i][0] + "</td>";
optionsHTML += "<td>" + data[i][2] + "</td>";
optionsHTML += "<td>" + data[i][1] + "</td>";
optionsHTML += "<td>" + data[i][10] + "</td>";
optionsHTML += "</tr>"
}
return optionsHTML;}
function editPO(){
var whichPO = document.getElementsByName("selectedPO");
for(i=0 ; i < whichPO.length ; i++) {
if(whichPO[i].checked)
{
alert("you have chosen "+ whichPO[i].value);
}}}
HTML:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form>
<table name="table" id="table">
<tr>
<th>Edit?</th>
<th>PO No.</th>
<th>Vendor</th>
<th>Date</th>
<th>Total</th>
</tr>
<?!= htmlOrders(); ?>
</table>
<script>
</script>
</form>
</body>
</html>
发布于 2018-04-13 16:35:01
服务器端函数必须通过google.script.run调用。在htmlOrders()函数中,将"onClick“处理程序更改为:
"'onclick='google.script.run.editPO()'
至于为什么它不工作-请记住,GAS的运行时环境不是你的浏览器,所以你不能从'.gs‘文件中访问文档对象模型(DOM)或BOM (浏览器对象模型)。您尝试访问的方法和属性属于web浏览器中的“窗口”对象,这意味着它们只能在客户端访问。当你调用alert("Hello!")您真正要做的是选择全局对象(在本例中为window)的一个属性:
要查看'.gs‘文件的全局对象,请尝试Logger.log(这个)并检查输出-您会感到惊讶的。如果您需要将值从服务器端传递到客户端,请使用成功和失败处理程序:
google.script.run
.withSuccessHandler(function(res) {
console.log(res);
})
.withFailureHandler(function(err){
console.log(err);
})
.runServerFunc(req);
总而言之,将您的客户端JS代码包装在标记中,您就可以运行了。
https://stackoverflow.com/questions/49820742
复制相似问题