【问题标题】:How to use Jquery UI in my Custom Function? (Autocomplete)如何在我的自定义函数中使用 Jquery UI? (自动完成)
【发布时间】:2011-02-10 02:10:58
【问题描述】:

我想创建一个函数来简化 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() }
});

这给了我一个错误:

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

【问题讨论】:

    标签: javascript jquery jquery-ui-plugins


    【解决方案1】:

    抱歉,我不擅长使用 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 与我分享解决这个问题.. ^_^

    【讨论】:

      【解决方案2】:

      也许错误是指request.term in

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        相关资源
        最近更新 更多