我在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经验,所以我有一些困难
答案 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
。我个人认为没有必要更改参数的默认名称。