JQuery自动完成源不更新

Posted

技术标签:

【中文标题】JQuery自动完成源不更新【英文标题】:JQuery Autocomplete source not updating 【发布时间】:2019-06-11 07:30:24 【问题描述】:

我正在使用jquery-ui autocomplete 插件。

这是我实例化自动完成插件的方式。

//autofill
$( "#TextArea" ).autocomplete(
    source: "search.php?option="+ option.toLowerCase(),
    minLength: 3
);

在下拉更改时,我正在尝试更改选项:

$('#Options').on('change',  function() 
        option = this.value.toLowerCase();
        var teaxtarea = $('#TextArea');
        //this is supposed to change the source string when the option value changes.
        teaxtarea.autocomplete( "option", "source", "search.php?option="+ option);
    
);

我从下面的问题中获得了更新源字符串的代码。

Jquery: Possible to dynamically change source of Autocomplete widget?

但是,这个解决方案似乎对我不起作用。

即使我更改下拉列表中的选项,我仍然会得到第一个选择的选项。 非常感谢任何帮助。

【问题讨论】:

出于好奇,您为什么要在用户键入时更改数据源? option = this.value.toLowerCase(); "search.php?option="+ option 与之前的 "search.php?option="+ option.toLowerCase(), 不一样,那么您期望结果有什么变化? 更深入地查看示例,我发现它们正在根据特定更改更新源代码。无论如何,您可能都想使用“函数”源,因为您可以确保浏览器不会使用更复杂的 AJAX 调用来缓存值。 @TJ ,我有一个下拉菜单和一个文本区域。 #options 是下拉菜单,#textarea 是文本字段。我需要的是,根据下拉列表中选择的值在文本区域中获取自动填充建议。 【参考方案1】:

建议如下:

$("#TextArea").autocomplete(
    source: function(req, resp)
      var option = $('#Options option:selected').val().toLowerCase();
      $.ajax(
        cache: false,
        url: "search.php",
        data: 
          option: option,
          term: req.term
        ,
        dataType: "json",
        success: function(data)
          resp(data);
        
      );
    ,
    minLength: 3
);

我认为一个问题是,如果#Options<select> 元素,则需要找到选中的子元素:

$("#Options option:selected")

这可确保您拥有正确的对象,然后您可以调用 .val() 。如果您在此处需要更多帮助,请使用 MCVE 更新您的帖子:https://***.com/help/mcve

这可能会为您解决问题。如果没有,请继续。

其次,为了确保您没有缓存,我们可以执行更手动的源捕获。

使用字符串时,自动完成插件期望该字符串指向将返回 JSON 数据的 URL 资源。它可以在同一台主机上,也可以在不同的主机上(必须支持 CORS)。自动完成插件不过滤结果,而是添加了一个带有 term 字段的查询字符串,服务器端脚本应使用该字段过滤结果。

因此,我们通过添加一些设置来复制相同的功能。因此,每次检查来源时,都会检查选项并发送术语。我们将以 JSON 格式取回数据并发送回 Autocomplete 以进行显示。

希望对您有所帮助。

【讨论】:

可能,缓存本身就是问题@twisty!非常感谢您非常清楚的解释:-)

以上是关于JQuery自动完成源不更新的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 移动自动完成不会自我更新

更新 JSF 组件后,jQuery 自动完成功能不再起作用

在 GridView 中使用 JQuery 自动完成

Rails jQuery-自动完成客户端

选择时jQuery自动完成触发器返回

devbridge ajax 自动完成不会更新建议列表