【问题标题】:Autocomplete dropdown without jQuery with links没有带有链接的 jQuery 的自动完成下拉列表
【发布时间】:2016-06-26 17:26:18
【问题描述】:

我正在尝试使用 HTML5 datalist 属性的自动完成下拉菜单,而不使用 JQuery。但我希望每条建议在被选中时都转到特定链接(或者当按下回车键时,转到第一个建议)。

我现在拥有的是:

<form action="www.site.com/search?q=" method="get">

 <input name="q" type="text" id="txtAutoComplete" list="languageList"/>

  <datalist id="languageList">

   <option value="OPTION1" />
   <option value="OPTION2" />

  </datalist>

</form>

在这种情况下,它会在站点中执行搜索。我希望每个选项都打开一个特定的链接,或者使用链接末尾的 value http://www.hitsebeats.ninja/search/label/VALUE_HERE,它会转到 Blogger 中的正确标签。在最后一种情况下,我考虑添加事件onclick

<datalist id="languageList" onclick='location=this.options[this.selectedIndex].value;>

    <option value='http://www.hitsebeats.ninja/search/label/OPTION1'>
    OPTION1
    </option>

</datalist>

但没有成功。

【问题讨论】:

    标签: javascript html autocomplete html-datalist


    【解决方案1】:

    在 cmets 中的 OP 反馈后添加另一个答案。仅当数据列表中存在 typed 选项时才应重定向。

    <script>
        function redirect(value) {
            var options = document.getElementById("languageList").options;
    
            for(var i = 0; i < options.length; i++) {
                if (options[i].value == value)
                    window.location='http://www.example.com/' + value;
            };
        }
    </script>
    <form action="http://www.example.com/search?q=" method="get">
      <input name="q" type="text" id="txtAutoComplete" list="languageList" onchange="redirect(this.value)" />
    
      <datalist id="languageList">
        <option value='OPTION1'>OPTION1</option>
        <option value='OPTION2'>OPTION2</option>
      </datalist>
    </form>
    


    第一次尝试

    在输入元素上使用oninput,您可以根据您选择的选项更改位置。

    <form action="http://www.example.com/search?q=" method="get">
      <input name="q" type="text" id="txtAutoComplete" list="languageList" onchange="window.location='http://www.example.com/' + this.value" />
    
      <datalist id="languageList">
        <option value='OPTION1'>OPTION1</option>
        <option value='OPTION2'>OPTION2</option>
      </datalist>
    </form>
    

    告诉我这是否符合您的预期。

    【讨论】:

    • 这个想法看起来不错,但这会使任何输入的字母触发oninput,这没有给用户足够的时间来选择和选择或完成输入。
    • @HenriqueBarcelos 是的,忘记了……那么 onchange 是你最好的选择。但它只会在您失去对输入元素的关注时触发(点击离开)
    • 皮埃尔,我正要写它。感谢最初的帮助。我管理它改变 oninput 为 onchange。它解决了一切。但又出现了一个麻烦。如果用户没有选择一个选项,他们输入的内容将通过链接,并且不会发生。标签区分大小写,并且应该与 value 完全相同。有没有办法阻止用户输入的内容,只接受列表中的内容?
    • 编写一些 JS 代码来检查数据列表中输入的单词是否可能。所以你只有在它在那里时才会重定向。
    • @HenriqueBarcelos 我添加了另一个代码块,它执行我在上面评论中所说的操作。
    【解决方案2】:

    所以你知道,datalist 没有选定的事件,它不是用户控件。但是您可以监听输入更改事件,他们使用它来更改 url。

    【讨论】:

    • 好的,既然我知道 datalist 不支持 select,您能否说明下一步如何监听输入更改事件?
    猜你喜欢
    • 2015-06-17
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多