2010-04-20 66 views
0

我想創建一個函數來簡化jQuery UI自動完成的配置。這裏是我的功能代碼:如何在我的自定義函數中使用JQuery UI? (自動完成)

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

這是給我一個錯誤:

Uncaught ReferenceError: request is not defined

回答

0

對不起f或麻煩,我不善於使用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() } 
}); 

感謝傑弗裏要與我分享解決這個問題..^_^

1

也許是錯誤指的是要求.term in

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

是啊...我現在編輯我的代碼以查看一些結果。 – bakazero 2010-04-20 11:28:55