【问题标题】:Adding Bootstrap 4 Searchable Dropdown in Google Apps Script在 Google Apps 脚本中添加 Bootstrap 4 Searchable Dropdown
【发布时间】:2021-06-03 23:46:19
【问题描述】:

所以我一直在尝试使用 Bootstrap-select 在我的 Google Apps 脚本下拉菜单中添加搜索功能。

我尝试关注 this guide,并添加了可用的 cdn 和 js here,但我似乎无法让它在我的 Google Apps Script Webapp 中运行。我得到的只是一个没有搜索选项的下拉菜单。

下面是我的代码,谁能告诉我我做错了什么?

uform.html:

        <!doctype html>
    <html lang="en">
      <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    
        <!-- Bootstrap CSS -->
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
    
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    
      </head>
      <body>
      
        <div class="container">
          <ul class="nav nav-tabs" id="myTab" role="tablist">
          <li class="nav-item" role="presentation">
        <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
      </li>
      <li class="nav-item" role="presentation">
        <button class="nav-link" id="sales-tab" data-bs-toggle="tab" data-bs-target="#sales" type="button" role="tab" aria-controls="sales" aria-selected="false">Sales</button>
      </li>
      <li class="nav-item" role="presentation">
        <button class="nav-link" id="purchase-tab" data-bs-toggle="tab" data-bs-target="#purchase" type="button" role="tab" aria-controls="purchase" aria-selected="false">Purchase</button>
      </li>
       <li class="nav-item" role="presentation">
        <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Contact Details</button>
      </li>
    </ul>
    <div class="tab-content" id="myTabContent">
      <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">1</div>
      <div class="tab-pane fade" id="sales" role="tabpanel" aria-labelledby="sales-tab">
        
        <br><h3 class="display-6">New Sales Case</h3>
    
        <div class="col-md-4">
        <select class="selectpicker" data-live-search="true" aria-label=".form-select-sm example" id="inputSales-CaseOwner">
       
        </select>
        </div>
    
        <br><h5>Contact Details</h5>
    
        <form class="row g-3">
           <div class="col-md-4">
            <label for="inputSales-CxName" class="form-label">Search with Phone Number</label>
            <select class="selectpicker" data-live-search="true" aria-label="Default select example" id="inputSales-CxName">
          
            </select>
           </div>

 </form>
       <br><div>
        <button type="submit" class="btn btn-primary" id="save-button-contact">Save</button>
      </div>
  </div>
</div>
    
    
    </div>


    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.bundle.min.js" integrity="sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0" crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.6.0/dist/umd/popper.min.js" integrity="sha384-KsvD1yqQ1/1+IA7gi3P0tyJcT3vR+NdBTt13hSJ2lnve8agRGXTTyNaBYmCR/Nwi" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.min.js" integrity="sha384-nsg8ua9HAw1y0W1btsyWgBklPnCUAFLuTMS2G72MMONqmOymq585AcH49TLBQObG" crossorigin="anonymous"></script>
    -->
   <script>
function afterFormLoadsSalesCaseOwner(){

      google.script.run.withSuccessHandler(afterSalesDropdownReturned).getSalesCaseOwnerDropdown();

    }

    function afterSalesDropdownReturned(arrayOfArrays){
      var item = document.getElementById("inputSales-CaseOwner");

      arrayOfArrays.forEach(function(r){
        var option = document.createElement("option");
        option.textContent = r[0];
        item.appendChild(option);

      });


    }
document.addEventListener("DOMContentLoaded",afterFormLoadsSalesCaseOwner);
</script>
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
  </body>
</html>

functions.gs:

function getSalesCaseOwnerDropdown(){

const ss = SpreadsheetApp.getActiveSpreadsheet();
const ws = ss.getSheetByName("CaseOwners");
return ws.getRange(2, 1, ws.getLastRow()-1, 1).getValues();

}

我的结果是什么样的:

Screenshot from Webapp 我需要一个搜索框。

提前致谢!

【问题讨论】:

    标签: javascript google-apps-script bootstrap-4 dropdown bootstrap-select


    【解决方案1】:

    您必须在引导样式表之后将样式表添加到您的头脑中。

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/css/bootstrap-select.min.css">
    

    并将脚本添加到正文中

    <script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/js/bootstrap-select.min.js"></script>
    

    <!doctype html>
    <html lang="en">
    
    <head>
      <!-- Required meta tags -->
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
    
      <!-- Bootstrap CSS -->
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
    
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
      <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/css/bootstrap-select.min.css">
    </head>
    
    <body>
    
      <div class="container">
        <ul class="nav nav-tabs" id="myTab" role="tablist">
          <li class="nav-item" role="presentation">
            <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
          </li>
          <li class="nav-item" role="presentation">
            <button class="nav-link" id="sales-tab" data-bs-toggle="tab" data-bs-target="#sales" type="button" role="tab" aria-controls="sales" aria-selected="false">Sales</button>
          </li>
          <li class="nav-item" role="presentation">
            <button class="nav-link" id="purchase-tab" data-bs-toggle="tab" data-bs-target="#purchase" type="button" role="tab" aria-controls="purchase" aria-selected="false">Purchase</button>
          </li>
          <li class="nav-item" role="presentation">
            <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Contact Details</button>
          </li>
        </ul>
    
    
        <div class="tab-content" id="myTabContent">
          <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">1</div>
          <div class="tab-pane fade" id="sales" role="tabpanel" aria-labelledby="sales-tab">
    
            <br>
            <h3 class="display-6">New Sales Case</h3>
    
            <div class="col-md-4">
              <select class="selectpicker" data-live-search="true" aria-label=".form-select-sm example" id="inputSales-CaseOwner">
    
              </select>
            </div>
    
            <br>
            <h5>Contact Details</h5>
    
            <form class="row g-3">
              <div class="col-md-4">
                <label for="inputSales-CxName" class="form-label">Search with Phone Number</label>
                <select class="selectpicker" data-live-search="true" aria-label="Default select example" id="inputSales-CxName">
    
                </select>
              </div>
    
            </form>
            <br>
            <div>
              <button type="submit" class="btn btn-primary" id="save-button-contact">Save</button>
            </div>
          </div>
        </div>
    
    
      </div>
    
    
      <!-- Optional JavaScript; choose one of the two! -->
    
      <!-- Option 1: Bootstrap Bundle with Popper -->
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.bundle.min.js" integrity="sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0" crossorigin="anonymous"></script>
    
      <!-- Option 2: Separate Popper and Bootstrap JS -->
      <!--
        <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.6.0/dist/umd/popper.min.js" integrity="sha384-KsvD1yqQ1/1+IA7gi3P0tyJcT3vR+NdBTt13hSJ2lnve8agRGXTTyNaBYmCR/Nwi" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.min.js" integrity="sha384-nsg8ua9HAw1y0W1btsyWgBklPnCUAFLuTMS2G72MMONqmOymq585AcH49TLBQObG" crossorigin="anonymous"></script>
        -->
    
      <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    
      <script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/js/bootstrap-select.min.js"></script>
    
    
      <script>
        function getSalesCaseOwnerDropdown() {
    
          const ss = SpreadsheetApp.getActiveSpreadsheet();
          const ws = ss.getSheetByName("CaseOwners");
          return ws.getRange(2, 1, ws.getLastRow() - 1, 1).getValues();
    
        }
      </script>
    
      <script>
        function afterSalesDropdownReturned(arrayOfArrays) {
          var item = document.getElementById("inputSales-CaseOwner");
    
          arrayOfArrays.forEach(function(r) {
            var option = document.createElement("option");
            option.textContent = r[0];
            item.appendChild(option);
    
          });
    
    
        }
    
        function afterFormLoadsSalesCaseOwner() {
    
          //google.script.run.withSuccessHandler(afterSalesDropdownReturned).getSalesCaseOwnerDropdown();
    
        }
    
    
        document.addEventListener("DOMContentLoaded", afterFormLoadsSalesCaseOwner);
      </script>
    
    </body>
    
    </html>

    继续关注脚本顺序

    【讨论】:

    • 您好,感谢您的回复。我能够在我的下拉列表中添加搜索栏,但它现在已经停止填充它以前从谷歌电子表格中的数据填充的选项。你能帮我解决这个问题吗?
    • @AdityaBajaj 你必须在afterFormLoadsSalesCaseOwner() 中取消注释google.script.run...
    • 嘿,如果我删除它,下拉菜单将如何从我的 js 函数中获取数据?抱歉打扰了,但我是新手,它不工作
    • 不要删除,只是取消注释,
    • 您的下拉式可搜索只需要数据,您必须将数据传递给该数据
    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多