2012-01-10 16 views
0

我需要一個jQuery自動完成,只有一個調用服務器,然後存儲在本地,並在jqgrid的後續調用中使用返回的數組。其他人也可以在網格之外工作; 我在我的onload jQuery的功能:使用jquery使用javascript封閉的自動完成

$('#text').myAutocomplete({url:'...'}); 

而另一個在jqGrid的 - 下面的dataInit是使用要autocmpleted一個文本框參數/在其他方面 修改我用的是ASP回調。淨Web服務,因此在我的Ajax調用的msg.d

$('#table').jqGrid({ 
    ..., 
    colModel:[..., 
      name:'col1',...,dataInit:function(el){ 
         $.myAutocomplete({url:'..',elem:el}); 
         } 
      ...], 
    ... 
}); 

然後在我的自動完成功能:

(function($){ 
var returnArray = []; 
$.fn.myAutocomplete = function(options){ 
    var element = options.elem || this; 
    if(returnArray.length === 0){ //checking if the local array is populated or not 
    $.ajax({ // all other ajax options for asp.net webservice to respond are also set here 
    ..., 
    url: options.url, 
    success : function(msg){ 
       returnArray = msg.d; 
       } 
    }); 
    } 
    return element.autocomplete({source:returnArray}); 
    } 
})(jQuery); 

問題是'text'上的自動完成功能不起作用 - 我將在工作中測試jqgrid的自動完成器明日照片

+1

使用我的函數的所有調用同一個陣列剛剛意識到即時通訊 - 這顯然是有缺陷的,因爲我需要不同的呼叫diferent網址返回不同的陣列 – 2012-01-10 01:38:36

+0

chohi〜正確的,儘管這可能不是你的主要潛在問題。在任何情況下,通過在你的'$ .fn.myAutocomplete'主體中引入'returnArray'聲明可以很容易地解決這個問題。在任何情況下,因爲我看到在你的代碼中調用'element.autocomplete',我假設你正在從jQuery UI加載自動完成功能? – 2012-01-10 03:07:25

回答

0

/*決定改變方法; 寫了下面的代碼
叫我autocomplte一個TextBox */

$('#textbox').txtAc({url:txtUrl}); 

//調用從呼叫自動完成回來的jqGrid

dataInit:function(elem){ 
var gridArray; 
var gridAc = $.getMyGridAc(); 
gridArray = gridAc.getStoredArray(); 
elem.autocomplete({source:gridArray}); 
}; 

//其中的插件/功能:

(function($){ 
    $.myAc = function(options){ 
    var storedArray = []; 

    $.fillStoredArray = function(){ 
    $.ajax({url:options.url, 
      ..., 
      success:function(msg){ 
        storedArray = msg.d; 
        if(options.el){ 
         options.el.autocomplete({source:storedArray}); //1st time called, call jquery ui autocomplete from the ajax call if the element was specified (textbox); grid cant specify element in advance 
         } 
        } 
    }); 
    } 
    return { 
    getStoredArray :function(){ 
         if (storedArray.length === 0){ 
         $.fillStoredArray(); 
        } 
     return storedArray; 
      } 
    } 
} 
})(jQuery); 

/*現在,我可以開始重用我的插件 - 下面的一個jqGrid的回調則對於一個普通的文本框 jqGrid的自動完成:

的jqGrid的,第一個創建和$ .myAc返回一個封閉的實例:爲

*/

(function($){ 
    $.prepareGridForAc = function(){ 
     var myGridAc = $.myAc({url:gridUrl}); 
     return function getMyGridAc(){ 
     return myGridAc; 
     } 
    } 
})(jQuery); 

//當用戶負載電網第1次(或激活標籤在網格上) - 調用prepareGridForAc

// 
$.prepareGridforAc(); 
// 

//文本框自動完成:

(function($){ 
    $.fn.txtAc = function(options){ 
    var myTxtAc ; 
    var acArray; 
    $.extend(options,el:this); 
    myTxtAc = $.myAc(options); 
    acArray = myTxtAc.getStoredArray(); 
    return this.autocomplete({source:acArray}); 
    } 
})(jQuery);