2012-01-10 8 views
0

jquery 자동 완료가 필요합니다. 서버에 대한 호출을 한 번만 수행 한 다음 로컬로 저장하고 반환 된 배열을 jqgrid의 후속 호출에서 사용합니다. 그것은 자동 채우기를 위해 그리드 바깥에서도 작동합니다. 내가 내 온로드에서 JQuery와 기능이 있습니다jquery를 사용하여 javascript 클로저를 사용하는 자동 완성

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

그리고있는 jqGrid에서 또 하나 - 아래의 dataInit가 나는 ASP를 사용하고 다른 방법 수정 autocmpleted 할 텍스트 상자 인수를/사용하는 콜백입니다. 인터넷 웹 따라서 서비스 내 자동 완성 기능에서

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

다음 내 아약스 호출에서 msg.d :

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

는 문제가있다 자동 완성 '텍스트'작동하지 않습니다 - 난 직장에서 내일은 jqgrid 자동 완성기를 테스트합니다

+1

내 함수에 대한 모든 호출에 동일한 배열을 사용하고 있습니다. 다른 배열을 반환하기 위해 다른 호출을해야하기 때문에 이것은 분명히 결함입니다. –

+0

chohi ~ 올바른 것이지만 기본 문제는 아닙니다. 어쨌든, 그것은'$ .fn.myAutocomplete' 본문에서'returnArray' 선언을 가져옴으로써 쉽게 해결할 수 있습니다. 어쨌든, 당신의 코드에서'element.autocomplete'에 대한 호출을 보았 기 때문에 jQuery UI에서 자동 완성 기능을로드하고 있다고 가정하고 있습니까? –

답변

0

/* 접근 방식을 변경하기로 결정; 은 텍스트 상자 내 autocomplte를 호출 다음 코드
를 썼다 */

$('#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에 대한

, 1 만들고 $ .myAc에서 폐쇄 인스턴스를 반환 : 대한

*/

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

// 때 사용자로드 그리드를 1 시간 (또는 그리드에 탭을 활성화 참조) - prepareGridForAc 전화를

// 
$.prepareGridforAc(); 
// 

// 텍스트 상자 자동 완성 :

관련 문제