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

Nic*_*sen 18 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;
Run Code Online (Sandbox Code Playgroud)

从我可以看到,如果用户键入两次相同的值,上面代码的第六行将阻止执行.这在大多数时候都有意义,但在我的场景中它会导致问题.

我正在构建一个ajax应用程序,它有一个固定的标题,顶部有一个搜索输入.用户可以在搜索框中输入他们想要的任何内容,并且会弹出一个div,其搜索结果与他们的查询相匹配.如果用户键入"abc"并单击结果,则会通过ajax加载相应的页面并清除搜索框.问题是如果他们再次在'abc'中输入用户,则不会触发搜索方法,因为他们输入的内容与他们上次搜索的内容相匹配.

有没有办法在用户点击搜索结果时清除存在于窗口小部件中的self.term值?或者有没有其他方法可以解决我的问题,而无需烹饪我自己的Autocomplete小部件版本?

谢谢

Nic*_*sen 24

执行以下操作会重置上一个搜索词:

 $('#AutocompleteElementID').data().autocomplete.term = null;
Run Code Online (Sandbox Code Playgroud)

如果在选择项目时执行以下操作,它将清除上一个搜索词,并使窗口小部件在再次键入相同值时执行搜索.

  • 现在它是$('#AutocompleteElementID').data().uiAutocomplete.term = null; (5认同)