簡體   English   中英

jQuery UI自動完成多種“響應”方法

[英]jquery ui autocomplete multiple “response” methods

讓我們看看我是否可以很好地解釋它...我有一個函數可以為我的自動完成功能設置常用選項(minLength,delay,close,response ...)。 但是我的自動完成功能之一需要在響應方法上做一些額外的工作。 如何執行“原始通用響應函數”和額外的工作? 是否可以不擴展窗口小部件?

function attachAutocomplete_Common(arControlIds) {
    $.each(arControlIds, function (i, control) {
        $("#" + control).autocomplete({
            minLength: 3,
            delay: 800,
            autoFocus: true,
            focus: function (event, ui) {
                $(this).val(ui.item.label);
                return false;
            },
            response: function (event, ui) {
                if (ui.content != null && ui.content.length === 1) {
                    $(this).data("ui-autocomplete").term = null;
                    $(this).data("ui-autocomplete")._trigger("select", "autocompleteselect", { item: ui.content[0] });
                    $(this).autocomplete("close");
                }
            }
        });
    });
}

$(document).ready(function () {
    attachAutocomplete_Common(["cmbCountry", "cmbCity", "cmZipCode"]);

    $("#cmZipCode").autocomplete({
        response: function (event, ui) {
            [execute common response function];
            doSomeExtraWork();
        }
    });
}); 

在小部件之外,將通用代碼放入其自己的函數中。 然后把它從兩個位置-從response內部attachAutocomplete_Common從一個#cmZipCode

var commonResponse = function (event, ui) {
    if (ui.content != null && ui.content.length === 1) {
        $(this).data("ui-autocomplete").term = null;
        $(this).data("ui-autocomplete")._trigger("select", "autocompleteselect", { item: ui.content[0] });
        $(this).autocomplete("close");
    }
};

function attachAutocomplete_Common(arControlIds) {
    $.each(arControlIds, function (i, control) {
        $("#" + control).autocomplete({
                // ommitted, see above
            },
            response: commonResponse.bind(this)
        });
    });
}

$(document).ready(function () {
    attachAutocomplete_Common(["cmbCountry", "cmbCity", "cmZipCode"]);

    $("#cmZipCode").autocomplete({
        response: function (event, ui) {
            commonResponse.bind(this)(event, ui);
            doSomeExtraWork();
        }
    });
});

編輯:范圍問題:像在另一個答案中,或通過綁定。 我已經更新了代碼。 我還沒有嘗試過在所示的each循環中綁定功能是否足夠。

基於Risadinha的答案,我成功了。 嘗試訪問“ commonResponse”函數內的“ this”時出錯。 這是工作代碼。

var commonResponse = function (event, ui, $ctl) {
    if (ui.content != null && ui.content.length === 1) {
        var $self = $ctl || $(this);

        $self.data("ui-autocomplete").term = null;
        $self.data("ui-autocomplete")._trigger("select", "autocompleteselect", { item: ui.content[0] });
        $self.autocomplete("close");
    }
};

function attachAutocomplete_Common(arControlIds) {
    $.each(arControlIds, function (i, control) {
        $("#" + control).autocomplete({
                // ommitted, see above
            },
            response: commonResponse
        });
    });
}

$(document).ready(function () {
    attachAutocomplete_Common(["cmbCountry", "cmbCity", "cmbZipCode"]);

    $("#cmbZipCode").autocomplete({
        response: function (event, ui) {
            commonResponse(event, ui, $(this));
            doSomeExtraWork();
        }
    });
}); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM