私のカスタム関数でjQuery UIを使用する方法は? (オートコンプリート)

StackOverflow https://stackoverflow.com/questions/2674402

質問

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() }
});

それは私にエラーを与えます:

猛攻撃の参照エラー:リクエストは定義されていません

役に立ちましたか?

解決 2

問題を申し訳ありませんが、私は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() }
});

この問題を解決するために私と共有してくれてありがとうジェフリー.. ^_ ^

他のヒント

おそらく、エラーはrequest.term inを参照しています

$("input#tag").myAutocomplete({
    dataUrl: "/auto_complete/tag",
    dataSend: { term: request.term, category: $("input#category").val() }
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top