javascript - 使用 Google 电子表格中的值数组填充 jQuery 自动完成列表

标签 javascript jquery-ui google-apps-script google-sheets

我正在尝试使用以下 here HTML 服务文本框中的自动完成功能。

我可以成功地做到这一点,但我想更改可用的标签。标签应该来自电子表格。我已经尝试了以下...请提供任何帮助。

<script>
var ss = SpreadsheetApp.openById("0Avt7ejriwlxudGZfV2xJUGJZLXktm2RhQU1uRUgtaXc");
   var s = ss.getSheetByName("Database");
   var lastrow = s.getLastRow();
   var list = s.getRange(2,3, lastrow).getValues();
   for( var i = 0; i < list.length; i++)  {

  }

    $(function() {
    var availableTags = [list[i][0]];
    $( "#tags" ).autocomplete({
    source: availableTags
    });
    });
</script>

任何帮助我如何修改代码以正确链接可用标签。

最佳答案

最好将 UI HTML 与将填充列表的 Apps 脚本代码分开。因此,首先,这里介绍了如何使用从 Apps 脚本函数返回的 availableTags 列表来分离这些位。 (改编自 previous answer 到类似的问题。)

作为网络应用程序发布,这将产生一个带有自动完成功能的输入框,其中可用的标签已从应用程序脚本函数中提供。我们在页面加载时调用该函数,如下所示:

      google.script.run.withSuccessHandler(buildTagList)
                       .getAvailableTags();

代码.gs

function doGet() {
  var template = HtmlService
                 .createTemplateFromFile('Autocomplete');

  var htmlOutput = template.evaluate()
                   .setSandboxMode(HtmlService.SandboxMode.NATIVE)
                   .setTitle('jQuery UI Autocomplete - Default functionality');

  return htmlOutput;
}

function getAvailableTags() {
  // In production code, get an array of options by
  // reading a spreadsheet.
  var availableTags = [
    "ActionScript",
    "AppleScript",
    "Asp",
    "BASIC",
    "C",
    "C++",
    "Clojure",
    "COBOL",
    "ColdFusion",
    "Erlang",
    "Fortran",
    "Groovy",
    "Haskell",
    "Java",
    "JavaScript",
    "Lisp",
    "Perl",
    "PHP",
    "Python",
    "Ruby",
    "Scala",
    "Scheme"];

  return( availableTags );
}

自动完成.html

<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags" />
</div>

<script>
// This code in this function runs when the page is loaded.
$(function() {
  google.script.run.withSuccessHandler(buildTagList)
      .getAvailableTags();
});

function buildTagList(availableTags) {
  $( "#tags" ).autocomplete({
    source: availableTags
  });
}
</script>

getAvailableTags()

框架如上运行后,您可以继续填充电子表格中的 availableTags 列表,替换我们开始使用的固定数组。像这样:

function getAvailableTags() {

  var ss = SpreadsheetApp.openById("0Avt7ejriwlxudGZfV2xJUGJZLXktm2RhQU1uRUgtaXc");
  var s = ss.getSheetByName("Database");
  var data = s.getDataRange().getValues();
  var headers = 1; // number of header rows to skip at top
  var tagColumn = 2; // column # (0-based) containing tag

  var availableTags = [];
  for (var row=headers; row < data.length; row++) {
    availableTags.push(data[row][tagColumn]);
  }

  return( availableTags );
}

关于javascript - 使用 Google 电子表格中的值数组填充 jQuery 自动完成列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923402/

相关文章:

javascript - 如何使用 casperjs 获取标签中的文本?

javascript - JavaScript 应该只在需要时加载吗?

JQuery Accordion - 取消绑定(bind)点击事件

javascript - 使用脚本应用程序从 Google Sheet 中的单元格中提取日期

javascript - 如何合并 Google 表格中的行

javascript - UIKit (getuikit) slider 组件拒绝工作

javascript - 在javascript中按数字随机化颜色

jquery-ui - jQueryUI 可删除,停止传播到重叠的同级

javascript - jQuery Datepicker 触发 POST

google-apps-script - 仅复制和粘贴值和格式 - Google Script