在jQuery UI Autocomplete小部件的keydown事件中,默认case语句具有以下代码:
default:
// keypress is triggered before the input value is changed
clearTimeout( self.searching );
self.searching = setTimeout(function() {
// only search if the value has changed
if ( self.term != self.element.val() ) {
self.selectedItem = null;
self.search( null, event );
}
}, self.options.delay );
break;
从我所看到的,如果用户输入两次相同的值,上面代码的第六行会阻止执行。这在大多数情况下都有意义,但在我的情况下,它会导致问题。
我正在构建一个具有固定标头的ajax应用程序,顶部有一个搜索输入。用户可以在搜索框中输入他们想要的任何内容,并且会弹出一个div,其搜索结果与他们的查询相匹配。如果用户键入“abc”并单击结果,则会通过ajax加载相应的页面并清除搜索框。问题是如果用户再次输入'abc',搜索方法就不会被触发,因为他们输入的内容与他们上次搜索的内容相匹配。
当用户点击搜索结果时,有没有办法清除小部件中存储的self.term值?或者是否有其他方法可以解决我的问题,而无需烹饪我自己的Autocomplete小部件版本?
由于
答案 0 :(得分:23)
执行以下操作会重置上一个搜索字词:
$('#AutocompleteElementID').data().autocomplete.term = null;
如果在选择项目时执行以下操作,它将清除上一个搜索词,并使窗口小部件在再次键入相同值时执行搜索。
答案 1 :(得分:2)
不幸的是,
$(this).data().autocomplete.term = null;
不会清除输入字段。为此,以下工作:
close: function(event, ui) {
// Close event fires when selection options closes
$('input')[0].value = ""; // Clear the input field
}
答案 2 :(得分:1)
如果自动完成功能返回self,则对于自动完成元素,您应该只能调用
$yourAutoCompleteElement.term = null;
当你想清除它时。
答案 3 :(得分:1)
这对我不起作用:
$(this).data().autocomplete.term = null;
但是这个DID在jQuery UI中适用于我 - v1.10.2:
$(this).data().term = null;
答案 4 :(得分:1)
你应该尝试:
$("#AutocompleteElementID").autocomplete("instance").term = null;
让我知道它是否适合你
答案 5 :(得分:0)
close: function(event, ui)
{
// Close event fires when selection options closes
$(this).data().autocomplete.term = null; // Clear the cached search term, make every search new
},
答案 6 :(得分:0)
清除文本字段后,您可以通过调用jquery ui autocomplete" search"重置上一次搜索。带有空字符串的方法。
$('#AutocompleteElementID').autocomplete( "search", "" );
默认情况下,在显示任何项目之前必须满足最小搜索长度,因此它可以有效地清除搜索而不显示所有结果。
http://api.jqueryui.com/autocomplete/#method-search
这应该是处理这种情况的稳定方法,因为搜索方法不会随着时间的推移而改变。
答案 7 :(得分:0)
最新版本的jQuery / jQuery UI中的API发生了变化。
现在访问窗口小部件实例上的属性的正确方法是:
$("#AutocompleteElementID").autocomplete("instance").term = null;
代码示例:http://jsfiddle.net/altano/sdpL17z5/
已验证使用jQuery UI 1.11.4和jQuery 2.2.3