jQuery UI自动完成:清除以前的搜索词

时间:2011-11-30 16:48:38

标签: javascript jquery jquery-ui autocomplete

在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小部件版本?

由于

8 个答案:

答案 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