始终在 jQuery 自动完成中显示一个字符串,即使它与输入字符串不匹配

Posted

技术标签:

【中文标题】始终在 jQuery 自动完成中显示一个字符串,即使它与输入字符串不匹配【英文标题】:Always show a string in jQuery Autocomplete even if it doesn't match input string 【发布时间】:2019-07-11 10:30:50 【问题描述】:

我知道同样的问题发布在:Always show a specific choice in jQuery Autocomplete even if it doesn't match input

问题是当使用上述问题中建议的打开功能作为解决方案时,仅当自动完成列表中有匹配项时才会触发该事件。因此,当用户在搜索框中输入时,并不总是显示特定的选择。

https://jsfiddle.net/u1jwz6s4/

<html lang="en">
<head>
<meta charset="utf-8">
<title>autocomplete demo</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>

<label for="autocomplete">Select a programming language: </label>
<input id="autocomplete">

</body>
</html>

$( "#autocomplete" ).autocomplete(
source: [ "c++", "java", "php", "coldfusion", "javascript", "asp",    "ruby" ],
open: function()
$('.ui-autocomplete').prepend("search by keyword")
,
);

我想始终在最顶部显示“搜索为关键字”作为选项,无论用户在搜索框中输入时是否有匹配的字符串。目前,“搜索为关键字”仅在找到匹配字符串时显示在顶部。另外,是否有使“搜索为关键字”成为搜索表单中的可点击事件?请参阅 jsfiddle 以了解我所描述的内容。

【问题讨论】:

你能举例说明一下吗 【参考方案1】:

您可以使用response 选项将unshift search by keyword 字符串添加到显示的标签数组中:

const $input = $("#autocomplete");
$input.autocomplete(
  source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"],
  response: (event, ui) => 
    const label = 'search by keyword';
    ui.content.unshift(
      label,
      value: $input.val()
    );
  
);
$(document).on('click', '.ui-autocomplete div:contains("search by keyword")', () => 
  console.log('searching for ' + $input.val());
);
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.12.4.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<label for="autocomplete">Select a programming language: </label>
<input id="autocomplete">

【讨论】:

如何提交点击时在搜索框中输入的实际关键字值,而不是覆盖实际值的“按关键字搜索”? 拥有一个实际上是用作按钮的自动完成标签非常奇怪——我认为这会让用户感到非常困惑。但是如果你不得不做这样的事情,你可以在click div 上为click 事件使用事件委托,请参阅编辑 正是我想要完成的。谢谢。 哦,jQuery 选项,而不是属性。请参阅here - 您可以选择uiAutocomplete 菜单对象并在open 处理程序中调用menu.focus(null, $('li', menu.element).eq(1)); 用户已经将注意力集中在输入字段上,所以只听输入字段上的输入?在非输入字段jsfiddle.net/pv8g5ct4 上按 Enter 是没有意义的

以上是关于始终在 jQuery 自动完成中显示一个字符串,即使它与输入字符串不匹配的主要内容,如果未能解决你的问题,请参考以下文章

使用 React Material-UI 自动完成始终显示默认选项

始终显示自动完成列表,即使搜索不匹配

jQuery自动完成ajax请求不显示返回的数据

jQuery UI自动完成定位问题

Jquery PrettyPhoto - 如何始终显示下一个上一个按钮?

jQuery UI 自动完成 - 输入与结果集不匹配时不显示结果