在实现 JQGrid 4.3.0、Jquery 1.6.2 和 JQuery UI 1.8.16 时,我遇到了内联编辑的问题。当内联编辑被激活时,一些元素被分配一个自动完成。当内联编辑被取消或保存时,自动完成并不总是消失(通过双击选择文本然后点击删除,然后点击转义退出行编辑)。当该行不再处于编辑模式时,将自动完成控件留在编辑模式。
也许您可以告诉我初始化是否有问题,或者您是否知道事件后“afterrestorefunc”字段可以返回到它们的“原始”状态。原始状态在 JQGrid 行中显示为数据。
我尝试在行关闭后删除 DOM,.remove() 和 .empty():
...
"afterrestorefunc": function(){
$('.ui-autocomplete-input').remove(); }
...
但这会导致其他问题,例如 jqgrid 在序列化数据行或编辑时无法找到单元格,并且需要刷新页面,而不仅仅是 jqgrid,才能再次看到该行中的数据.
双击该行会创建元素的自动完成功能:
function CreateCustomSearchElement(value, options, selectiontype) {
...
var el;
el = document.createElement("input");
...
$(el).autocomplete({
source: function (request, response) {
$.ajax({
url: '<%=ResolveUrl("~/Services/AutoCompleteService.asmx/GetAutoCompleteResponse") %>',
data: "{ 'prefixText': '" + request.term + "', 'contextKey': '" + options.name + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
response($.map(data.d, function (item) {
return {
label: Trim(item),
value: Trim(item),
searchVal: Trim(item)
}
}))
}
});
},
select: function (e, item) {
//Select is on the event of selection where the value and label have already been determined.
},
minLength: 1,
change: function (event, ui) {
//if the active element was not the search button
//...
}
}).keyup(function (e) {
if (e.keyCode == 8 || e.keyCode == 46) {
//If the user hits backspace or delete, check the value of the textbox before setting the searchValue
//...
}
}).keydown(function (e) {
//if keycode is enter key and there is a value, you need to validate the data through select or change(onblur)
if (e.keyCode == '13' && ($(el).val())) {
return false;
}
if (e.keyCode == '220') { return false }
});
}
其他来源: http ://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing
http://api.jqueryui.com/autocomplete/
更新: 我尝试仅在元素聚焦时创建自动完成,并在 onblur 时将其删除。那也没有解决问题。似乎只需要触发自动完成下拉菜单。