制作更简单的函数jquery?

制作更简单的函数jquery?,jquery,function,autocomplete,Jquery,Function,Autocomplete,我的页面上几乎没有自动完成功能,但我有一个问题,一切正常,但问题是我不知道我将如何使用ID,也许我可以使用ID创建一个函数并创建一些数组,这样我可以轻松维护代码,这就是我现在拥有的吗 $('#autocomplete-1').autocomplete({ source: autocompleteDataSource, minLength: 3, delay: 800, appendTo: '#au

我的页面上几乎没有自动完成功能,但我有一个问题,一切正常,但问题是我不知道我将如何使用ID,也许我可以使用ID创建一个函数并创建一些数组,这样我可以轻松维护代码,这就是我现在拥有的吗

  $('#autocomplete-1').autocomplete({
            source: autocompleteDataSource,
            minLength: 3,
            delay: 800,
            appendTo: '#auto-complete-1',
            select: autocompleteOnSelect,
            open: function () {
                setTimeout(function () { $("#ui-id-1").show(); }, 100);
            },
            response: function (event, ui) {
                if (ui.content.length === 0) {
                    $(this).val("No results found");
                } else {
                    $(this).empty();
                }
            }
        });
        $('#autocomplete-2').autocomplete({
            source: autocompleteDataSource,
            minLength: 3,
            delay: 800,
            appendTo: '#auto-complete-2',
            select: autocompleteOnSelect,
            open: function () {
                setTimeout(function () { $("#ui-id-2").show(); }, 100);
            },
            response: function (event, ui) {
                if (ui.content.length === 0) {
                    $(this).val("No results found");
                } else {
                    $(this).empty();
                }
            }
        });
        $('#autocomplete-3').autocomplete({
            source: autocompleteDataSource,
            minLength: 3,
            delay: 800,
            appendTo: '#auto-complete-3',
            select: autocompleteOnSelect,
            open: function () {
                setTimeout(function () { $("#ui-id-3").show(); }, 100);
            },
            response: function (event, ui) {
                if (ui.content.length === 0) {
                    $(this).val("No results found");
                } else {
                    $(this).empty();
                }
            }
        });

需要在数组中设置所有ID,然后循环到函数中吗?

如果向所有自动完成元素添加一个空CSS类(如
.autocomplete{}
),则可以如下更改函数:

    $('.autocomplete').autocomplete({
        source: autocompleteDataSource,
        minLength: 3,
        delay: 800,
        appendTo: this.id,
        select: autocompleteOnSelect,
        open: function () {
            setTimeout(function () { $(this). ??? show(); }, 100);
        },
        response: function (event, ui) {
            if (ui.content.length === 0) {
                $(this).val("No results found");
            } else {
                $(this).empty();
            }
        }
    });
您基本上只需要一个通用函数,不需要任何ID数组

唯一需要做的是以动态方式识别ID
#ui-ID-2
的后续子级,这取决于您的布局(当上面有“?”时)

尝试以下方法:

var arr = $('[id^=autocomplete-]');

$.each(arr, function(index, obj){
     $('#autocomplete-' + (index+1)).autocomplete({
        source: autocompleteDataSource,
        minLength: 3,
        delay: 800,
        appendTo: '#autocomplete-' + (index+1),
        select: autocompleteOnSelect,
        open: function () {
            setTimeout(function () { $('#ui-id-' + (index+1)).show(); }, 100);
        },
        response: function (event, ui) {
            if (ui.content.length === 0) {
                $(this).val("No results found");
            } else {
                $(this).empty();
            }
        }
    });
  });

您可以执行以下操作,使用带开头的选择器:

$("[id^='autocomplete-']").autocomplete
rest of it
然后把身份证作为

var id = $(this).attr("id").split("autocomplete-")[1]
然后

var ui = $("#ui-id-_" + id)
这将为您提供id。因此您不需要保留数组作为引用,您可以从元素中获取id

编辑:


您真正想要的是什么,简化jquery函数?唯一的问题是append?你能写下整个函数吗?我还是想附加到不同的ID上?这让我有个问题附加到:“#auto-complete-1”,我不能传递到autocomplete var ID???@ThinkDifferent是的,对不起,我没有注意到这一点。你明白了吗?唯一的问题是append@Gorostas对不起,对不起,我错过了那个。它现在已经修复:)这是伟大的伙伴,txanks,任何运气可能使数组dinamicaly获得所有自动完成和ud,并使数组,如果我在页面上添加新的自动完成将工作great@Gorostas我已经更改了代码,请现在再试一次。很好,但是这样,如果我得到结果,自动完成不会显示?我不知道为什么?
$("[id^='autocomplete-']").autocomplete({
        source: autocompleteDataSource,
        minLength: 3,
        delay: 800,
        var id = $(this).attr("id").split("autocomplete-")[1] //gives you the id
        appendTo: '#auto-complete-' + id,
        select: autocompleteOnSelect, 
        open: function () {
            setTimeout(function () { $("#ui-id-" + id).show(); }, 100);
        },
        response: function (event, ui) {
            if (ui.content.length === 0) {
                $(this).val("No results found");
            } else {
                $(this).empty();
            }
        }
    });