2012-12-18 122 views
0

我在jqgrid中實現自動完成時遇到問題。我走了研究,別名,直到我在一個目前不符合的網站上提出這個問題。問題在於,我必須在我正在開發的應用程序中多次使用自動完成功能。現在我有這樣的功能:JqGrid +自動完成

的Javascript:

function autocomplete_element(value, options) { 
    var $ac = $('<input type="text"/>'); 
    $ac.val(value); 
    $ac.autocomplete({ 
    source: function(request, response) 
    {   
     $.getJSON("autocomplete.php?id=estrategico", 
      { q: request.term }, response); 
    } 
    }); 
    return $ac; 
} 

的jqGrid:

jQuery("#obj_oper_org").jqGrid({ 
    (...) 
     {name:'COD_OBJ_EST',index:'COD_OBJ_EST', hidden: true, editable:true, editrules:{required:true, edithidden:true}, edittype : 'custom', editoptions : {'custom_element' : autocomplete_element}}, 

什麼意在傳遞參數給JavaScript函數更多的是爲了不永遠重複同樣的功能每個領域,因爲我需要不斷變化的網址。是否有可能製作一些類型的東西?對不起,但我沒有太多的JavaScript經驗,所以我有一些困難

回答

3

首先,你不需要使用edittype : 'custom'能夠使用jQuery UI自動完成。相反,你只能使用dataInit

您可以定義例如myAutocomplete功能像

function myAutocomplete(elem, url) { 
    setTimeout(function() { 
     $(elem).autocomplete({ 
      source: url, 
      minLength: 2, 
      select: function (event, ui) { 
       $(elem).val(ui.item.value); 
       $(elem).trigger('change'); 
      } 
     }); 
    }, 50); 
} 

然後用

{ name:'COD_OBJ_EST', hidden: true, editable: true, 
    editoptions: { 
     dataInit: function (elem) { 
      myAutocomplete(elem, "autocomplete.php?id=estrategico"); 
     } 
    }} 

要小心,將被髮送到服務器參數的名稱爲標準名稱term代替您當前使用的名稱q。我個人認爲沒有必要更改參數的默認名稱。

+0

感謝這個類型,甚至是試圖實現這些日子的東西。 – UZUMAKI

+0

@UZUMAKI:不客氣! – Oleg

+0

你能幫我解疑嗎? – UZUMAKI