【问题标题】:Why auto complete does not work in this example with Bootstrap?为什么自动完成在这个带有 Bootstrap 的示例中不起作用?
【发布时间】:2021-12-01 19:35:44
【问题描述】:

我正在尝试使用动态数据实现自动完成下拉列表,但它没有在下拉列表中显示任何建议。我正在使用这个例子 - 数据列表:https://getbootstrap.com/docs/5.1/forms/form-control/ 这适用于预定义的选项标签。

<label for="exampleDataList" class="form-label">Datalist example</label>
   <input class="form-control" list="datalistOptions" id="exampleDataList" placeholder="Type to search...">
   <datalist id="datalistOptions">
       ... dynamic data here
   </datalist>

我确实收到了来自 PHP 脚本的数据并且它们被正确访问,但我认为问题可能是由于获取延迟造成的。 HTML 可能期望数据在加载时已经存在。这就是为什么它可能适用于现有数据。

这是 fetch 函数中的 javacsript 代码,我在其中动态生成标签:

 var select = document.getElementById("datalistOptions");
 select.innerHTML = "";

 for (var key in data['result']) {
    var val = data['result'][key];
    if (data['result'].hasOwnProperty(key) && key != "error") {
       var val = data['result'][key];
      
       if (val != "") {
          var option = document.createElement("option");              
          option.value = val.id;
          select.appendChild(option);
       }
    }
 }

更新:我稍微更改了 js 代码。现在它使用 appendChild 而不是 add 函数。前一个没有向数据列表添加任何选项。 appendChild 确实将选项添加到列表中,但不会显示它们。

【问题讨论】:

  • 你如何调用生成列表的 js 脚本?检查 HTML 源代码 - 那里看起来不错?
  • @TomerE 请阅读我的更新
  • 你的更新还没有回答这个问题,你在哪里/何时/如何实际调用它。显示的代码是在页面加载时运行,还是在用户已经在字段中输入时运行,或者...?
  • @CBroe 代码在用户类型时运行。所以当用户开始输入时。
  • stackoverflow.com/questions/26610752/… 有几种方法来处理这个问题。

标签: javascript html bootstrap-4


【解决方案1】:

这是您尝试做的更简单的版本。 试着接受它,添加你的条件,如果可以的话,让数据以那种形式出现。

     var data = ["Haifa","Tel Aviv","Jerusalem"];
        var select = document.getElementById("datalistOptions");
        select.innerHTML = "";
        for (var key in data) {
                var option = document.createElement("option");
                option.label = data[key];
                option.value = data[key];
                select.appendChild(option);
          }

并确保添加调用脚本的 onclick 事件,也许这是你的问题,你没有调用脚本 - 我会推荐这样的东西:

<input onclick="datalistCreate()" class="form-control" list="datalistOptions" id="exampleDataList" placeholder="Type to search...">

datalistCreate() 是脚本中的函数名。

【讨论】:

  • 你测试了吗?它有效吗?不在我的电脑上
  • 当然我正在调用脚本,我说我正在接收数据。这不是问题
  • 是的,它有效。您可以添加您的代码,以便我们查看失败的地方吗?
  • 它并没有真正失败,它只是没有在输入下方显示建议的信息。但是当我检查它时,选项标签就在那里。
  • 我测试了你的,它确实有效,但如果我将它放在异步 fetch() 函数中,那么它不会,可能是因为从服务器接收数据的延迟
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 2017-10-12
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多