【问题标题】:Google Sheets Script Sidebar button not activating functionGoogle表格脚本侧边栏按钮未激活功能
【发布时间】:2018-09-02 17:50:27
【问题描述】:

我已经花了几个小时试图弄清楚这一点,因为我觉得我应该在在这里提问之前这样做。搜索,查看答案,尝试了一些东西。我认为我通过这种方式学习并扩展我的技能/知识。

无论如何,我正在尝试开始使用侧边栏以使我的工作表脚本应用程序更好地工作,并进行小块测试。我希望 Clear Old 按钮(此时)只需打开一个包含日期的警报框,该框由datePicker 生成的文本框提供。

这里是 HTML:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Datepicker - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
   <script>
  $( function() {
    $( "#datepicker" ).datepicker();
  } );
  </script>
    <base target="_top">
  </head>
<body>
<p><strong>Clear Old Entries</strong></p>
          <p>Clear Entries before</p>
<p><input type="text" id="datepicker"></p>
        <p><input type="submit" value="Clear Old" onClick="google.script.run.ClearOld(document.getElementById(datepicker).value)" /></p>
        <p><input type="button" value="Close Sidebar" onClick="google.script.host.close()" /></p>
</body>
</html>

这里是获取菜单项和侧边栏的脚本代码,以及我试图用作短期测试的功能:

function onInstall(e) {
  onOpen(e);
}

function onOpen(e) {
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .createMenu('Bulletinator')
      .addItem('Create Bulletin', 'bulletinatorSidebar')
      .addItem('Clear Old', 'clearOldSideBar')
      .addToUi();
}

function bulletinatorSidebar() {
  var html = HtmlService.createHtmlOutputFromFile('BullV2Side')
      .setTitle('Bulletinator')
      .setWidth(300);
  SpreadsheetApp.getUi().showSidebar(html);
}

function clearOldSideBar() {
  var html = HtmlService.createHtmlOutputFromFile('ClearOldSide')
      .setTitle('Clear Old Entries')
      .setWidth(300);
  SpreadsheetApp.getUi().showSidebar(html);
}

var today;
var todayDay;
var todayDate;

var ui = SpreadsheetApp.getUi(); 
var sh = SpreadsheetApp.getActiveSheet();
var rg = sh.getDataRange();
var vA = rg.getValues();
var rowsFound = 0;
var rowsDeleted = 0;

function ClearOld(value) {
  var clearDate=value;
  var testThis = ui.alert(
 'Clear entries prior to',
 clearDate,
  ui.ButtonSet.YES_NO);

当我点击侧边栏中的按钮时,没有响应,执行记录中也没有显示任何内容。

顺便说一句,我也很难在侧边栏中有两个 datePicker;只有一个工作。所以这就是为什么这个设置有两个单独的侧边栏被调用。

感谢您的帮助。

【问题讨论】:

  • 在您的 html 中,clearDate 未定义。如果您按 F12(打开浏览器的控制台),您应该会看到一个错误。因为这里抛出了一个错误,所以你的服务器脚本永远不会被调用。您可能想要$("#datepicker").value,即日期选择器输入的值。
  • @tehhowch 我明白你在说什么,但不清楚如何做到这一点。我将 $("#datepicker").value 放在函数调用中,但这不起作用。我需要转义我的 html 并创建一个变量来达到这种效果吗?
  • 当我进行这样的调用时,我通常会引用客户端函数,例如onclick=myLocalCodeFn() 然后function myLocalCodeFn() { /* setup and associated processing, like making an object of values to pass */ google.script.run.... 我不怎么使用 jQuery,所以这可能是错误的选择器。我知道你想传递document.getElementById(datepicker).value 的值,所以使用任何可行的方法。
  • @tehhowch 我将按钮代码更改为 并且控制台仍然说无法读取 null 的“值”。我不确定我没有得到什么。这些年来,我学习了相当多的 Actionscript,并且能够将其中的大部分内容改编为 JavaScript,但不知道我在哪里。
  • 所以ClearOldSideBar() 中的ClearOldSide 对应于您提供的html,对吗?

标签: javascript google-apps-script sidebar google-sheets-api


【解决方案1】:

看来,datepicker 变量没有定义。你必须使用下一个代码

onClick="google.script.run.ClearOld(document.getElementById('datepicker').value)"

onClick="google.script.run.ClearOld($('#datepicker').val())"

【讨论】:

  • 不应该 $('datepicker')$('#datepicker') 吗?只是为了聊天,没关系。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2021-11-15
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多