开发者问题收集

Javascript 未在 Google 应用脚本中运行

2014-05-23
59

我在尝试在 Google 应用脚本中运行以下代码时遇到问题。

// 1.foldername = Folder name               | 3.templateId = ID of the template to use
// 2.SheetId    = ID of spreadsheet to use. | 4.rootFolder = ID of the root folder to save everything to

function createTemplate(){
  var folderName = $("#fileName").text(); //Get text from fileName textbox  
  var rootId = $("#rootId").val(); //Get value of selected item in rootId element
  var sheetId = $("#fileId").val(); //Get value of selected item in fileId element
  var templateId = $("#templateId").val(); //Get value of selected item in templateId element

  //google.script.run.template(folderName, sheetId, templateId, rootId); //Execute template function serverside
  alert('done'); //Create alert to show that it is done |Remove after debugging|
}

当调用上述代码时,它不会执行。我已通过在上述块内的多个点创建日志进行了测试。行

  var folderName = $("#fileName").text(); //Get text from fileName textbox  
  var rootId = $("#rootId").val(); //Get value of selected item in rootId element
  var sheetId = $("#fileId").val(); //Get value of selected item in fileId element
  var templateId = $("#templateId").val(); //Get value of selected item in templateId 

以上的内容都将被执行。我还注释掉了这些行,这样代码就可以正常执行。因此,我认为错误出在这些行中,但我不确定错误是什么。

这是我的 HTML 代码,希望对您有所帮助。

<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <title>Report builder</title>
    <?!= bootstrap.css ?>
    <?!= include('site')?>
</head>
<body>
    <div class="body">

      <? var files = getAllFiles(); ?>
      <? var templates = getAllTemplates(); ?>
      <? var folders = getAllFolders(); ?>
      <form class="form-horizontal">
        <div class="control-group">
          <div class="controls" style="margin:5px;">
            <input id="fileName" type="text" placeholder="Folder name"/>
          </div>
        </div>

        <div class="control-group">
          <div class="controls" style="margin:5px;">
            <select id="rootId" style="height:30px;">
                <option value="Drive">Drive</option>
              <? for (i in folders){ ?>
                <option value="<?= folders[i].getId(); ?>"> <?= folders[i].getName(); ?> </option>
              <? } ?>
            </select>
          </div>
        </div>

        <div class="control-group">
          <div class="controls" style="margin:5px;">
            <select id="fileId" style="height:30px;">
              <? for (i in files){ ?>
                <option value="<?= files[i].getId(); ?>"> <?= files[i].getName(); ?> </option>
              <? } ?>
            </select>
          </div>
        </div>

        <div class="control-group">
          <div class="controls" style="margin:5px;">
            <select id="templateId" style="height:30px;">
              <? for (i in templates){ ?>
                <option value="<?= templates[i].getId(); ?>"> <?= templates[i].getName(); ?> </option>
              <? } ?>
            </select>
          </div>
        </div>
        <button class="btn btn-primary" type="button" onclick="createTemplate()">Create Report</button>
     </form>
    </div>
</body>

我的 JavaScript 函数位于 HTML 文件的底部。 提前致谢!

1个回答

这是因为您混合了服务器代码和客户端代码。请务必重新阅读 htmlService 文档。您无法从服务器访问 dom 或使用 jquery。所有这些 vslues 都必须作为参数从客户端 js 传递到 google.run 服务器调用中。

Zig Mandel
2014-05-23