【问题标题】: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' />