如何在我的自定义函数中使用 Jquery UI? (自动完成)

发布于 2024-08-29 16:45:39 字数 1571 浏览 9 评论 0原文

我想创建一个函数来简化 jQuery UI AutoComplete 的配置。这是我的函数代码:

(function($) {
    $.fn.myAutocomplete = function() {
        var cache = {};
        var dataUrl = args.dataUrl;
        var dataSend = args.dataItem;

        $.autocomplete({
            source: function(request, response) {
                if (cache.term == request.term && cache.content) {
                    response(cache.content);
                }
                if (new RegExp(cache.term).test(request.term) && cache.content && cache.content.length < 13) {
                    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                    response($.grep(cache.content, function(value) {
                        return matcher.test(value.value)
                    }));
                }
                $.ajax({
                    url: dataUrl,
                    dataType: "json",
                    type: "POST",
                    data: dataSend,
                    success: function(data) {
                        cache.term = request.term;
                        cache.content = data;
                        response(data);
                    }
                });
            },
            minLength: 2,
        });
    }
}) (jQuery);

但是当我使用这个函数时,例如:

$("input#tag").myAutocomplete({
    dataUrl: "/auto_complete/tag",
    dataSend: { term: request.term, category: $("input#category").val() }
});

它给了我一个错误:

未捕获的引用错误:请求未定义

I want to create a function to simplify configuration of jQuery UI AutoComplete. Here is my function code:

(function($) {
    $.fn.myAutocomplete = function() {
        var cache = {};
        var dataUrl = args.dataUrl;
        var dataSend = args.dataItem;

        $.autocomplete({
            source: function(request, response) {
                if (cache.term == request.term && cache.content) {
                    response(cache.content);
                }
                if (new RegExp(cache.term).test(request.term) && cache.content && cache.content.length < 13) {
                    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                    response($.grep(cache.content, function(value) {
                        return matcher.test(value.value)
                    }));
                }
                $.ajax({
                    url: dataUrl,
                    dataType: "json",
                    type: "POST",
                    data: dataSend,
                    success: function(data) {
                        cache.term = request.term;
                        cache.content = data;
                        response(data);
                    }
                });
            },
            minLength: 2,
        });
    }
}) (jQuery);

but when I'm using this function like:

$("input#tag").myAutocomplete({
    dataUrl: "/auto_complete/tag",
    dataSend: { term: request.term, category: $("input#category").val() }
});

It's give me an error:

Uncaught ReferenceError: request is not defined

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无所谓啦 2024-09-05 16:45:39

也许错误是指 request.term 中的

$("input#tag").myAutocomplete({
    dataUrl: "/auto_complete/tag",
    dataSend: { term: request.term, category: $("input#category").val() }
});

Perhaps the error is referring to request.term in

$("input#tag").myAutocomplete({
    dataUrl: "/auto_complete/tag",
    dataSend: { term: request.term, category: $("input#category").val() }
});
我家小可爱 2024-09-05 16:45:39

抱歉给您带来麻烦,我不擅长使用jquery。这是最终的工作代码。

(function($) {
    $.fn.myAutocomplete = function(opt) {
        var cache = {};

        this.autocomplete({
            source: function(request, response) {
                if (cache.term == request.term && cache.content) {
                    response(cache.content);
                }
                if (new RegExp(cache.term).test(request.term) && cache.content && cache.content.length < 13) {
                    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                    response($.grep(cache.content, function(value) {
                        return matcher.test(value.value)
                    }));
                }
                opt.dataSend.term = request.term;
                $.ajax({
                    url: opt.dataUrl,
                    dataType: "json",
                    type: "POST",
                    data: opt.dataSend,
                    success: function(data) {
                        cache.term = request.term;
                        cache.content = data;
                        response(data);
                    }
                });
            },
            minLength: 2,
        });
        return this;

    }
}) (jQuery);

要使用这个函数,只需编写如下代码:

$("input#tag").myAutocomplete({
    dataUrl: "/auto_complete/tag",
    dataSend: { category: $("input#category").val() }
});

感谢 Jeffery To 与我分享解决这个问题.. ^_^

Sorry for the trouble, I'm not adept at using jquery. Here's the final working code.

(function($) {
    $.fn.myAutocomplete = function(opt) {
        var cache = {};

        this.autocomplete({
            source: function(request, response) {
                if (cache.term == request.term && cache.content) {
                    response(cache.content);
                }
                if (new RegExp(cache.term).test(request.term) && cache.content && cache.content.length < 13) {
                    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                    response($.grep(cache.content, function(value) {
                        return matcher.test(value.value)
                    }));
                }
                opt.dataSend.term = request.term;
                $.ajax({
                    url: opt.dataUrl,
                    dataType: "json",
                    type: "POST",
                    data: opt.dataSend,
                    success: function(data) {
                        cache.term = request.term;
                        cache.content = data;
                        response(data);
                    }
                });
            },
            minLength: 2,
        });
        return this;

    }
}) (jQuery);

To use this function just write code like this:

$("input#tag").myAutocomplete({
    dataUrl: "/auto_complete/tag",
    dataSend: { category: $("input#category").val() }
});

Thanks Jeffery To for sharing with me to solve this problem.. ^_^

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文