仅当输入字段具有特定的 class 时才将 jQuery 自动完成应用于输入字段

Apply jQuery autocomplete to an input field only when it has a certain class

我有一个带有下拉按钮的 Bootstrap 输入元素。可以从下拉菜单中选择搜索选项:按引号搜索、按字符搜索。当一个选项被选中时,相关的 class 被添加到输入元素中,当前的 class 被移除。

我尝试仅在选择class 'character'的输入字段时将自动完成函数应用于输入字段。我不希望在选择 'search by quote' 选项时显示自动完成列表。

我是否需要使用点击事件处理程序触发自动完成功能 - 当 'search by character' 选项被选中时?

我的HTML:

<div class="input-group">
    <div class="input-group-btn">
        <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Search by <span class="caret"></span></button>
        <ul class="dropdown-menu">
            <li id="quoteSearch"><a href="#">quote</a></li>
            <li id="charSearch"><a href="#">character</a></li>
        </ul>
    </div>
    <input id="searchBox" type="text" class="form-control quote" placeholder="Search by quote" aria-label="...">
</div>

我的JS文件:

$(document).ready(function(){

    // Turn search field into character search
    $("#charSearch").click(function(){
        $("#searchBox").removeAttr("placeholder");
        $("#searchBox").attr("placeholder", "Search by character");
        $("#searchBox").removeClass("quote");
        $("#searchBox").addClass("character");
    });

    // Turn search field into quote search (default)
    $("#quoteSearch").click(function(){
        $("#searchBox").removeAttr("placeholder");
        $("#searchBox").attr("placeholder", "Search by quote");
        $("#searchBox").removeClass("character");
        $("#searchBox").addClass("quote");
    });

    // Autocomplete for character search
    $(function(){
        var availableTags = ['One' , 'Two' , 'Three' , 'Four']

        $(".character").autocomplete({
            source: availableTags,
        });
    });

});

您需要将自动完成方法绑定到输入,并在选择其他搜索类型时取消绑定:

var availableTags = ['One' , 'Two' , 'Three' , 'Four']

$("#charSearch").click(function(){
    $("#searchBox").autocomplete({
        source: availableTags,
    });
});

$("#quoteSearch").click(function(){
    $("#searchBox").autocomplete("destroy");
    $("#searchBox").removeData('autocomplete');
});