Javascript 打开建议时,从输入中删除底部边界半径

Javascript 打开建议时,从输入中删除底部边界半径,javascript,jquery,jquery-autocomplete,Javascript,Jquery,Jquery Autocomplete,我正在使用这个自动完成插件: 使用onSearchComplete将类添加到输入中以删除边界半径,但在选择或隐藏此类时删除此类时遇到问题 var $input = $('input[name=search]'); $input.autocomplete({ onSearchStart : function(){ $input.addClass('autocomplete-loading') }, onSearchComplete : function(){ $input.remo

我正在使用这个自动完成插件:

使用onSearchComplete将类添加到输入中以删除边界半径,但在选择或隐藏此类时删除此类时遇到问题

var $input = $('input[name=search]');
$input.autocomplete({
    onSearchStart : function(){ $input.addClass('autocomplete-loading') },
    onSearchComplete : function(){ $input.removeClass('autocomplete-loading').addClass('autocomplete-open') }
}); 
查看源代码时,我不认为有办法扩展onClose/etc,因此查看源代码时,我需要修改hide:函数,但如何从插件内部选择输入


演示:

您可以使用
onSelect
回调删除类:

$input.autocomplete({
    serviceUrl: 'search.json',
    onSearchStart: function() {
        $(this).addClass('autocomplete-loading')
    },
    onSearchComplete: function() {
        $(this).removeClass('autocomplete-loading').addClass('autocomplete-open')
    },
    onSelect: function() {
        $(this).removeClass('autocomplete-loading autocomplete-open');
    },
    onHide : function() {
        $(this).removeClass('autocomplete-loading autocomplete-open');
    }
});
UPD。不幸的是,当使用click outside或使用Escape键关闭下拉列表时,并没有回调函数。在本例中,您可以通过扩展本例中调用的
Autocomplete.prototype.hide
方法,自己添加此方法:

(function(original) {
    $.Autocomplete.prototype.hide = function() {
        this.options.onHide && this.options.onHide.call(this.element, this.options.params);
        original.apply(this, arguments);
    };
})($.Autocomplete.prototype.hide);
同样在callback中,
这个
指向同一个输入元素,因此您可以使用
$(这个)

演示:如果要使用隐藏: 您可以使用“this”选择项目

如果您想使用onSearchComplete:我想您可以从中检索3个元素

onSearchComplete: function(element, q, suggestions) {
                     //check element is the input
                     $(element).removeClass('abc').addClass('cba');
                }

如果你摆出一个演示会有帮助的。对不起,我刚刚用这个做了一个演示。问题是,如果你选择了一个建议,它只会删除打开的类,而不是如果你专注于一个非常好的方法,永远不知道你可以扩展这样的函数。是的,这是在对象原型上应用混合模式。这很酷,因为您不必为了做一些调整而弄乱库源代码。基本上,您不会对原始库代码进行任何更改,只需使用自己的函数对其进行包装。
onSearchComplete: function(element, q, suggestions) {
                     //check element is the input
                     $(element).removeClass('abc').addClass('cba');
                }