【问题标题】:Does jQuery autocomplete work with a dynamic array as sourcejQuery 自动完成功能是否使用动态数组作为源
【发布时间】:2012-12-01 03:23:16
【问题描述】:

我目前正在尝试使用存储在 javascript 变量中的源创建自动完成功能,但该变量可以由另一个函数更新。所以,我想要的是,每次用户更新自动完成字段时,都会生成自动完成的source 字段。

这是我使用的代码:

<head>
    <script>
        var availableTags = ['java', 'javascript']
        // can be called anytime
        var addToTags = function(str){availableTags.push(str)}

        $(function() {
            $( "#tags" ).autocomplete({
                source: availableTags
            });
        });
    </script>
</head>
<body>
    <div class="ui-widget">
        <label for="tags">Tags: </label>
        <input id="tags" />
    </div>
</body>

我需要做一个类似回调的函数吗?

【问题讨论】:

  • 你应该使用 $(document).ready()。
  • 什么是sources?并且:它目前是否有效?
  • 我认为你的源需要是一个函数,而不是一个数组。 api.jqueryui.com/autocomplete/#option-source
  • @Bergi 我更正了问题中的代码,该行应该是var addToTags = function(str){availableTags.push(str)}。您可以配对审核。
  • @ArashMilani 非常感谢您的编辑,这正是我想要的(复制粘贴错误)。

标签: javascript jquery jquery-ui autocomplete


【解决方案1】:

存储在 javascript 变量中的源,但该变量可以由另一个函数更新。

这应该行得通。如果自动完成和更新函数都引用同一个数组,您可以随时推送新值,这些值将在下次评估数组时立即使用(例如,在击键时)。

我希望每次用户更新自动完成字段时,都会生成自动完成的源字段。

那是另一回事。是的,这需要一个回调函数来动态生成source 数组,但这很简单。看看the docs

$( "#tags" ).autocomplete({
    source: function(request, resolve) {
        // fetch new values with request.term
        resolve(availableTags);
    }
});

【讨论】:

    【解决方案2】:

    只需在 addToTags 函数中添加一个重置调用即可自动完成:

    var addToTags = function(str){
       availableTags.push(str);
       $( "#tags" ).autocomplete({
           source: availableTags
       });
    }
    

    【讨论】:

    • 我可能已经在自己的回答中提到了这一点,但我很确定当自动完成当前处于活动状态时,这不会无缝工作。是吗?
    • 这就是我添加destroy 语句的原因。这段代码相当于第一次调用autocomplete
    • 是的,它确实会破坏当前打开的建议。看看jsfiddle.net/HBtsF 并尝试在那里使用自动完成功能!
    • 根据您的评论,我删除了 destroy 调用并尝试在每个时间间隔将项目推送到数组。有效。我已经相应地编辑了我的答案。自己检查一下:jsfiddle.net/HBtsF/1
    • 这个答案很好,但我更愿意独立于副作用方法来管理自动完成。
    【解决方案3】:

    这很简单

    $( "#tags" ).autocomplete('option', 'source', availableTags)
    

    根据需要设置 availableTags 数组

    【讨论】:

    • 谢谢!这正是在 Google App Script 和 google.script.run 中运行所解决的问题。
    猜你喜欢
    • 2013-11-11
    • 2012-09-09
    • 2014-01-16
    • 2016-05-03
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多