0

我在 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 方面没有太多经验,所以我遇到了一些困难

4

1 回答 1

3

首先,您不需要edittype : 'custom'使用 jQuery UI 自动完成功能。取而代之的是,您可以使用 just 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您当前使用的名称。我个人认为不需要更改参数的默认名称。

于 2012-12-18T12:09:29.733 回答