Javascript jquery自动完成打开函数被调用两次

Javascript jquery自动完成打开函数被调用两次,javascript,jquery,Javascript,Jquery,我有一个函数,可以将自动完成附加到我传入的任何文本框。如您所见,在“打开”功能的最后,我为用户填写单词,并选择自动填充的零件,以便他们可以通过按delete键将其删除。我遇到的问题是,当我通过按delete删除自动填充/自动选择的零件时,open函数会出于某种原因再次运行,并再次自动填充单词。这种行为只发生一次。如果我继续第二次删除自动填充的文本,文本框将保持这种状态 function attachAutoComplete(id, webMethod) { $("#" + id).aut

我有一个函数,可以将自动完成附加到我传入的任何文本框。如您所见,在“打开”功能的最后,我为用户填写单词,并选择自动填充的零件,以便他们可以通过按delete键将其删除。我遇到的问题是,当我通过按delete删除自动填充/自动选择的零件时,open函数会出于某种原因再次运行,并再次自动填充单词。这种行为只发生一次。如果我继续第二次删除自动填充的文本,文本框将保持这种状态

function attachAutoComplete(id, webMethod) {
    $("#" + id).autocomplete({
        source: function (request, response) {
            $.ajax({
                url: webMethod,
                data: "{ 'pre':'" + request.term + "'}",
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    response($.map(data.d, function (item) {
                        return { value: item }
                    }))
                }
            });
        },
        messages: {
            noResults: '',
            results: function () { }
        },
        minLength: 2,
        open: function () {
            $('.ui-autocomplete').css('width', '169px');
            $('.ui-autocomplete').css('z-index', '10000');
            $('.ui-autocomplete').css('list-style-type', 'none');
            $('.ui-autocomplete').css('border-width', '1px');
            $('.ui-autocomplete').css('border-color', '#b6b6b6');
            $('.ui-autocomplete').css('border-style', 'solid');
            $('.ui-autocomplete').css('background-color', '#fff');
            $('.ui-autocomplete').css('padding', '0px');
            $('.ui-menu-item').css('cursor', 'pointer');
            var input = $(this),
                firstElementText = input.data("ui-autocomplete").menu.element[0].children[0].textContent,
                original = input.val();
            input.val(firstElementText);
            input[0].selectionStart = original.length;
            input[0].selectionEnd = firstElementText.length;
        },
        close: function () {
            var input = $(this);
            var firstThreeLetters = input[0].id.substring(0, 3);            
            if (firstThreeLetters == "SNP") {
                GetVariantsGene(input);
            }
        }
    });
}
提前谢谢


更新:仅当用户输入的最后一个字符是字母时,“打开”功能才会再次运行。如果最后一个字符是数字,则不会再次运行。

您向我们展示了open函数,但没有显示调用它的位置。很明显,函数是起作用的,它被调用的位置和调用的条件是坏的。??JQuery应该会处理这个问题。当您声明$(id).autocomplete{}时,它负责为您调用autocomplete中包含的可选函数……但是它必须在某种按键事件逻辑中激活,或者在其他地方调用。除非显示错误可能发生的位置,否则无法调试它。当菜单打开时,它将被激活。我没有写任何代码来调用它。。。