You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Materialize Autocomplete的onAutocomplete为何返回activeIndex=-1而非选项id?

Materialize Autocomplete onAutocomplete事件中activeIndex为-1无法获取选中项id的解决方法

你遇到的问题是因为onAutocomplete事件的触发时机是在选中项已完成输入、下拉菜单关闭之后,此时组件的activeIndex会被重置为-1,无法通过它获取选中项信息。以下是几种可行的解决方法:

方法一:利用onAutocomplete的回调参数匹配data数组

onAutocomplete事件默认会将选中的文本内容作为参数传入回调函数,你可以用这个文本匹配初始化时的data数组,从而拿到对应的id:

<div class="input-field outlined s4" style="margin: 5px 5px;">
  <i class="material-icons prefix">search</i>
  <input type="text" id="vincularSetor.colaborador_id.autocomplete" form="form_vincularSetor" class="autocomplete">
  <label for="vincularSetor.colaborador_id.autocomplete">Nome do Colaborador</label>
</div>

<script>
  document.addEventListener('DOMContentLoaded', function() {
    const autocompleteData = [
      {id: 3, text: "Name 1"},
      {id: 4, text: "Name 2"}
    ];
    
    var elems = document.querySelectorAll('[id="vincularSetor.colaborador_id.autocomplete"]');
    var instances = M.Autocomplete.init(elems, {
      minLength: 0,
      data: autocompleteData,
      onAutocomplete: (selectedText) => {
        const selectedItem = autocompleteData.find(item => item.text === selectedText);
        if (selectedItem) {
          console.log('选中项id:', selectedItem.id);
        }
      }
    });
  });
</script>

方法二:监听下拉选项的点击事件

直接给Autocomplete生成的下拉选项绑定点击事件,在点击时直接获取对应的id值:

<div class="input-field outlined s4" style="margin: 5px 5px;">
  <i class="material-icons prefix">search</i>
  <input type="text" id="vincularSetor.colaborador_id.autocomplete" form="form_vincularSetor" class="autocomplete">
  <label for="vincularSetor.colaborador_id.autocomplete">Nome do Colaborador</label>
</div>

<script>
  document.addEventListener('DOMContentLoaded', function() {
    const autocompleteData = [
      {id: 3, text: "Name 1"},
      {id: 4, text: "Name 2"}
    ];
    
    var elems = document.querySelectorAll('[id="vincularSetor.colaborador_id.autocomplete"]');
    var instances = M.Autocomplete.init(elems, {
      minLength: 0,
      data: autocompleteData,
      onOpen: function() {
        const dropdownItems = this.dropdownEl.querySelectorAll('.autocomplete-content li');
        dropdownItems.forEach((item, index) => {
          item.addEventListener('click', () => {
            console.log('选中项id:', autocompleteData[index].id);
          });
        });
      }
    });
  });
</script>

方法三:使用组件的selectedItem属性

在onAutocomplete事件中直接访问组件的selectedItem属性获取选中文本,再匹配对应的id:

<div class="input-field outlined s4" style="margin: 5px 5px;">
  <i class="material-icons prefix">search</i>
  <input type="text" id="vincularSetor.colaborador_id.autocomplete" form="form_vincularSetor" class="autocomplete">
  <label for="vincularSetor.colaborador_id.autocomplete">Nome do Colaborador</label>
</div>

<script>
  document.addEventListener('DOMContentLoaded', function() {
    const autocompleteData = [
      {id: 3, text: "Name 1"},
      {id: 4, text: "Name 2"}
    ];
    
    var elems = document.querySelectorAll('[id="vincularSetor.colaborador_id.autocomplete"]');
    var instances = M.Autocomplete.init(elems, {
      minLength: 0,
      data: autocompleteData,
      onAutocomplete: function() {
        const selectedText = this.selectedItem;
        const selectedItem = autocompleteData.find(item => item.text === selectedText);
        if (selectedItem) {
          console.log('选中项id:', selectedItem.id);
        }
      }
    });
  });
</script>

注意:不同版本的Materialize Autocomplete API可能略有差异,以上方案基于官方标准实现。

内容的提问来源于stack exchange,提问作者Ygor Montenegro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:33:26