【问题标题】:How to manually trigger a search and then select the first option manually in jQueryUI autocomplete?如何手动触发搜索,然后在 jQueryUI 自动完成中手动选择第一个选项?
【发布时间】:2015-12-08 02:18:37
【问题描述】:

如何在 jQueryUI 自动完成中手动触发搜索和选择?在小提琴示例中,我设法触发了搜索,但无法触发 select 方法并选择第一个选项。

JSFIDDLE

solution in this 线程似乎已过时。它给出了这个错误:

Uncaught TypeError: Cannot read property '_trigger' of undefined

$(document).ready(function() {

 var aTags = ["ask","always", "all", "alright", "one", "foo", "blackberry", "tweet","force9", "westerners", "sport"];

 var tag = $('#tags');
 tag.autocomplete({
    source: aTags
 });

 $('div').click(function(){
    var newVal = $(this).text();  
    var oldVal = $('#tags').val();
    tag.val(oldVal+newVal)
    tag.autocomplete('search')
    tag.data('ui-autocomplete')._trigger('select', 'autocompleteselect', {item:{value:tag.val()}});
    
 })

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<div>a</div><div>b</div><div>c</div><div>d</div><div>e</div><div>f</div><div>g</div><div>h</div><div>i</div><div>j</div><div>k</div><div>l</div>
<div>m</div><div>n</div><div>o</div><div>p</div>
<div>q</div><div>r</div><div>s</div><div>t</div><div>u</div><div>v</div><div>w</div><div>x</div>
<div>y</div><div>z</div>

<input type='text' title='Tags' id='tags' />

【问题讨论】:

    标签: javascript jquery html jquery-ui autocomplete


    【解决方案1】:

    我从来都不喜欢依赖私有​​方法(开发人员用 _ 标记)来实现功能,因为这可能会在以后的更新中破坏您的代码。我检查了你提到的post中的所有答案,所有这些方法或多或少都有问题,所以我会尽量给你一个更标准的解决方案。

    问题始于使用data('ui-autocomplete') 来获取小部件实例,而自动完成插件公开了一个public method 调用$(selector).autocomplete('instance') 来实现相同的目的,所以不要使用它。

    接下来的问题是,您需要等待菜单打开并呈现项目以选择您想要的项目,这必须在事件中完成(请不要使用超时!!!)。为此,您有 autocompleteopen 事件。

    这是我第一次解决你的问题

    $(document).ready(function () {
        ...
    
        tag.on("autocompleteopen", function (event, ui) {
            // If there are suggestion results
            if (items.lenght > 0) {
                // Select the desired item here
            }
        });
    
        $('div').click(function () {
            var newVal = $(this).text();
            var oldVal = $('#tags').val();
            tag.val(oldVal + newVal);
            tag.autocomplete('search');         
        })
    });
    

    在这种情况下,使用tag.autocomplete('instance')._trigger 将无法正常工作。尽管使用正确的数据触发了事件,但菜单不会关闭,并且不会自动选择项目。您应该在正确的项目上使用点击事件。

    您需要解决另一个问题,当您的用户在输入中键入时,您可能希望禁用此功能,这可以通过变量轻松解决。

    检查解决方案。

    $(document).ready(function() {
      var autoPick = false;
      var aTags = ["ask", "always", "all", "alright", "one", "foo", "blackberry", "tweet", "force9", "westerners", "sport"];
      var tag = $('#tags');
      tag.autocomplete({
        source: aTags
      });
      tag.on("autocompleteopen", function(event, ui) {
        var items = tag.autocomplete('instance').menu.element.children();
        if (items.length > 0 && autoPick) {
          items.eq(0).trigger('click')
          autoPick = false;
        }
      });
      $('div').click(function() {
        var newVal = $(this).text();
        var oldVal = $('#tags').val();
        tag.val(oldVal + newVal);
        autoPick = true;
        tag.autocomplete('search');
      })
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/black-tie/jquery-ui.css">
    <div>a</div>
    <div>b</div>
    <div>c</div>
    <div>d</div>
    <div>e</div>
    <div>f</div>
    <div>g</div>
    <div>h</div>
    <div>i</div>
    <div>j</div>
    <div>k</div>
    <div>l</div>
    <div>m</div>
    <div>n</div>
    <div>o</div>
    <div>p</div>
    <div>q</div>
    <div>r</div>
    <div>s</div>
    <div>t</div>
    <div>u</div>
    <div>v</div>
    <div>w</div>
    <div>x</div>
    <div>y</div>
    <div>z</div>
    <input type='text' title='Tags' id='tags' />

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2011-12-30
      • 1970-01-01
      • 2017-08-06
      相关资源
      最近更新 更多