JqG​​rid +自动完成

时间:2012-12-18 11:46:20

标签: php javascript 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函数,因为我需要不断更改url。有可能制作一些类型的东西吗?很抱歉这个问题,但我没有太多的javascript经验,所以我有一些困难

1 个答案:

答案 0 :(得分:3)

首先,您不需要使用edittype : 'custom'来使用jQuery UI Autocomplete。而不是那样,你只能使用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。我个人认为没有必要更改参数的默认名称。