jqgrid添加后如何清除添加表单中的自动完成框内容
jqGrid 添加表单包含使用以下代码的自动完成框。 如果新行添加到jqgrid,自动完成字段不会被清除,仍然显示添加的行内容。 简单的文本框列已正确清除。 如何清除自动完成框?
var grid = $("#grid");
grid.jqGrid({
url: 'GetData',
datatype: "json",
mtype: 'POST',
scroll: 1,
multiselect: true,
multiboxonly: true,
scrollingRows : true,
autoencode: true,
prmNames: {id:"_rowid", oper: "_oper" },
colModel: [{"label":"Artikkel","name":"Toode","edittype":"custom","editoptions":{"custom_element":function(value, options) {
return combobox_element(value, options,'54','Toode','RidG','ArtikkelDokumendiReal')}
,"custom_value":combobox_value
},"editable":true},
],
gridview: true,
toppager: true,
editurl: 'Edit',
rownumbers: true,
});
grid.navGrid("#grid_toppager", { refreshstate: 'current' },
{},
{ url: 'AddDetail',
editData: { _dokdata: FormData },
savekey: [true, 13],
recreateForm: true,
closeOnEscape: true,
// todo: this does not clear autocomplete boxes:
clearAfterAdd: true,
addedrow: 'last',
reloadAfterSubmit: false,
afterSubmit: function (response) { return [true, '', response.responseText] },
});
function combobox_element(value, options, width, colName, entity, andmetp) {
var elemStr;
if (options.id === options.name)
// form
elemStr = '<div>' +
'<input class="FormElement ui-widget-content ui-corner-all" style="vertical-align:top" size="' +
options.size + '" value="' + value + '"/>' +
'<button ' +
' style="height:21px;width:21px;" tabindex="-1" /></div>';
else
elemStr = '<div>' +
'<input class="FormElement ui-widget-content " style="height:17px;vertical-align:top;width:' +
width + 'px" value="' + value + '"/>' +
'<button ' +
' style="height:21px;width:21px;" tabindex="-1" /></div>';
var newel = $(elemStr)[0];
setTimeout(function () {
input_autocomplete(newel, colName, entity, andmetp, validate);
}, 50);
return newel;
}
function input_autocomplete(newel, colName, entity, andmetp, fvalidate) {
var input = $("input", newel);
input.autocomplete({
source: 'Grid/GetLookupList'
});
}
function combobox_value(elem, operation, value) {
if (operation === 'get') {
return $(elem).find("input").val();
} else if (operation === 'set') {
$('input', elem).val(value);
}
}
jqGrid add forms contains autocomplete boxes using code below.
If new row is added to jqgrid, autocomplete fields are not cleared, the still show added row content.
Simple textbox columns are cleared properly.
How to clear autocomplete boxes also ?
var grid = $("#grid");
grid.jqGrid({
url: 'GetData',
datatype: "json",
mtype: 'POST',
scroll: 1,
multiselect: true,
multiboxonly: true,
scrollingRows : true,
autoencode: true,
prmNames: {id:"_rowid", oper: "_oper" },
colModel: [{"label":"Artikkel","name":"Toode","edittype":"custom","editoptions":{"custom_element":function(value, options) {
return combobox_element(value, options,'54','Toode','RidG','ArtikkelDokumendiReal')}
,"custom_value":combobox_value
},"editable":true},
],
gridview: true,
toppager: true,
editurl: 'Edit',
rownumbers: true,
});
grid.navGrid("#grid_toppager", { refreshstate: 'current' },
{},
{ url: 'AddDetail',
editData: { _dokdata: FormData },
savekey: [true, 13],
recreateForm: true,
closeOnEscape: true,
// todo: this does not clear autocomplete boxes:
clearAfterAdd: true,
addedrow: 'last',
reloadAfterSubmit: false,
afterSubmit: function (response) { return [true, '', response.responseText] },
});
function combobox_element(value, options, width, colName, entity, andmetp) {
var elemStr;
if (options.id === options.name)
// form
elemStr = '<div>' +
'<input class="FormElement ui-widget-content ui-corner-all" style="vertical-align:top" size="' +
options.size + '" value="' + value + '"/>' +
'<button ' +
' style="height:21px;width:21px;" tabindex="-1" /></div>';
else
elemStr = '<div>' +
'<input class="FormElement ui-widget-content " style="height:17px;vertical-align:top;width:' +
width + 'px" value="' + value + '"/>' +
'<button ' +
' style="height:21px;width:21px;" tabindex="-1" /></div>';
var newel = $(elemStr)[0];
setTimeout(function () {
input_autocomplete(newel, colName, entity, andmetp, validate);
}, 50);
return newel;
}
function input_autocomplete(newel, colName, entity, andmetp, fvalidate) {
var input = $("input", newel);
input.autocomplete({
source: 'Grid/GetLookupList'
});
}
function combobox_value(elem, operation, value) {
if (operation === 'get') {
return $(elem).find("input").val();
} else if (operation === 'set') {
$('input', elem).val(value);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在我看来,问题的存在是因为您使用 自定义编辑控件< /a> (
edittype:"custom"
、custom_element
和custom_value
。您要编辑的元素创造目前没有 id。您应该遵循 jqGrid id 转换并创建
元素,其
id
等于options.id
:更新:我更正了上面使用
options.id
作为
到值id
的代码。输入>options.id + "_x"
的问题是options.id
稍后会被 jqGrid 分配给元素。将表示为
newel
。 jQuery UI Autocomplete 要求将连接到的元素具有唯一的 id,因此我们可以选择任何其他 id作为
options.id
没有 id 重复项。It seems to me that the problem exist because you use custom edit control (
edittype:"custom"
,custom_element
andcustom_value
. The<input>
element which you create has currently no id. You should follow jqGrid id conversion and create the<input>
element havingid
equal tooptions.id
:UPDATED: I corrected the code above from the usage of
options.id
as theid
of the<input>
to the valueoptions.id + "_x"
. The problem that theoptions.id
will be assigned by jqGrid later to the<div>
element which will be represented asnewel
. jQuery UI Autocomplete required that the<input>
element, to which it will be connected, has an unique id so we can choose any other id asoptions.id
to have no id duplicates.