【发布时间】:2015-12-02 16:14:41
【问题描述】:
首先:我有以下带有自动完成功能的列:
{name:'ISRC',index:'isrc.ISRC', width:100,align:"left",editable:true,
edittype:'text',
editoptions:{
dataInit:function (elem) {
var sel_row_id = $grid.jqGrid ('getGridParam', 'selrow');
if (sel_row_id === undefined || sel_row_id === null) {sel_row_id="jqg1";}
$(elem).autocomplete({
source: "xtras/search_isrc.php",
dataType: "json",
minLength: 2,
select: function(event, ui) {
console.log("EditOptions - "+sel_row_id);
// $("#"+sel_row_id+"_id").val(ui.item ? ui.item.isrc_ID : "");
$("#"+sel_row_id+"_ISRC").val(ui.item.ISRC);
$("#"+sel_row_id+"_Track_Name").val(ui.item.Track_Name);
$("#"+sel_row_id+"_Track_Time").val(ui.item.Track_Time);
$("#"+sel_row_id+"_ArtistName").val(ui.item.ArtistName);
$("#"+sel_row_id+"_Writer").val(ui.item.Writer);
$("#"+sel_row_id+"_Publisher").val(ui.item.Publisher);
$("#"+sel_row_id+"_TrackPLineYear").val(ui.item.TrackPLineYear);
$("#"+sel_row_id+"_TrackPLineInfo").val(ui.item.TrackPLineInfo);
$("#"+sel_row_id+"_isrc_id").val(ui.item.isrc_ID);
var ffs = ui.item.isrc_ID;
console.log("ffs - "+ffs);
},
change: function(event, ui) {
if (ui.item) {
$("#"+sel_row_id+"_ISRC").val(ui.item.ISRC);
$("#"+sel_row_id+"_Track_Name").val(ui.item.Track_Name);
$("#"+sel_row_id+"_Track_Time").val(ui.item.Track_Time);
$("#"+sel_row_id+"_ArtistName").val(ui.item.ArtistName);
$("#"+sel_row_id+"_Writer").val(ui.item.Writer);
$("#"+sel_row_id+"_Publisher").val(ui.item.Publisher);
$("#"+sel_row_id+"_TrackPLineYear").val(ui.item.TrackPLineYear);
$("#"+sel_row_id+"_TrackPLineInfo").val(ui.item.TrackPLineInfo);
$("#"+sel_row_id+"_isrc_id").val(ui.item.isrc_ID);
}
}
});
$('.ui-autocomplete').css('zIndex',1000); // if autocomplete has misalignment so we are manually setting it
if(sel_row_id != 'jqg1'){
$(elem).css({'border':'1px solid red','background-color':'#e8b7cf'});
}
}
}
},
...
{name:'isrc_ID',index:'isrc.isrc_ID', hidden:true, width:50, sortable:true, editable:true},
ffs 输入控制台正确的 id
我还在 doubleClick 上设置了内联编辑:
ondblClickRow: function (rowid) {
console.log('ondblClickRow - '+rowid);
var savedRows = $grid.jqGrid("getGridParam", "savedRow");
$grid.jqGrid("setSelection", rowid);
if (savedRows.length > 0 && savedRows[0].id !== rowid) {
// cancel editing of another row is editing
// don't cancel on double click on the current editing
$grid.jqGrid("restoreRow", savedRows[0].id);
}
if (savedRows.length === 0) {
$grid.jqGrid("editRow", rowid, editOptions);
}
}
只有在我强制在此行上选择行$grid.jqGrid("setSelection", rowid); 后,我才能进行自动完成工作@
自动完成 PHP:
$sql = "select * from isrc where Track_Name REGEXP '[[:<:]]($q)[[:alnum:]]' or ISRC REGEXP '[[:<:]]($q)[[:alnum:]]' GROUP BY ISRC;";
$rsd = mysqli_query($GLOBALS["___mysqli_ston"], $sql);
while($data = mysqli_fetch_array($rsd)) {
$row_array['value'] = $data['ISRC'];
$row_array['label'] = $data['ISRC'].' - '.$data['Track_Name'].' - '.$data['ArtistName'].' - '.$data['Track_Time'].' - '.$data['TrackPLineInfo'];
$row_array['ISRC'] = $data['ISRC'];
$row_array['Track_Name'] = $data['Track_Name'];
$row_array['ArtistName'] = $data['ArtistName'];
$row_array['Track_Time'] = $data['Track_Time'];
$row_array['Writer'] = $data['Writer'];
$row_array['Publisher'] = $data['Publisher'];
$row_array['TrackPLineYear'] = $data['TrackPLineYear'];
$row_array['TrackPLineInfo'] = $data['TrackPLineInfo'];
$row_array['isrc_ID'] = $data['isrc_ID'];
}
((is_null($___mysqli_res = mysqli_close($conn))) ? false : $___mysqli_res);
echo json_encode($row_array);
在选择时自动完成看起来完全符合预期(正确填写所有字段) 提交到服务器以添加到数据库后,我得到了这个:
_REQUEST - 2015-12-02 17:00:13:
Array
(
[Catalogue] => 1958
[ISRC] => GBCQV0200199
[Disc_Number] => 1
[Track_Number] => 4
[is_bonus] => No
[Track_Name] => Hitch Hiking Woman
[ArtistName] => Peter Green Splinter Group
[Track_Time] => 00:00:00
[Writer] => Turner
[Publisher] => Bug Music Ltd
[TrackPLineYear] => 1997
[TrackPLineInfo] => Snapper Music
[isrc_ID] =>
[id] => jqg1
[copyID] =>
[oper] => add
)
如您所见,[isrc_ID] => 为空白。我能想到的唯一解释 - 这是因为这个字段是隐藏的......
我该如何解决这个问题?
其次:jqGrid - 添加时 - 如果在按 + 添加一行之前我选择/单击了任何其他现有行 - 网格认为我正在编辑新行 [id] => jqg1添加的。这是我的定义:
var editOptions = {
keys: true,
aftersavefunc: function() {
var $self = $(this);
setTimeout(function () {
$self.trigger("reloadGrid", [{current: true}]);
}, 50);
},
url: "xtras/Records.php"
},
gridIdSelector = "#Records",
pagerIdSelector = "#Records_pager",
$grid = $(gridIdSelector);
和寻呼机启动:
.jqGrid("navGrid", pagerIdSelector, {add: false, edit: false, refreshstate: "current"})
.jqGrid("inlineNav", pagerIdSelector, { editParams: editOptions, addParams: {addRowParams: editOptions}})
.jqGrid("navButtonAdd", pagerIdSelector, {
caption: "",
title: "Copy selected row",
id: $grid[0].id + "_ilcopy",
buttonicon: "ui-icon-copy",
onClickButton: function () {
var $self = $(this), p = $self.jqGrid("getGridParam"), rowData,
srcrowid = p.selrow, savedRows = p.savedRow;
if (srcrowid !== null) {
if (savedRows.length > 0) {
// cancel editing
$self.jqGrid("restoreRow", savedRows[0].id);
}
rowData = $self.jqGrid("getRowData", srcrowid);
rowData.id = "";
rowData.Catalogue = "";
rowData.copyID = srcrowid;
$self.jqGrid("addRow", {
initdata: rowData,
addRowParams: editOptions
});
} else {
alert("Please select a row to copy");
return false;
}
}
});
如何确保在内联编辑时完全重置先前的选择?
抱歉,我想不出为什么会出现这两种行为。如果您认为需要查看更多代码 - 请告诉我。
【问题讨论】:
标签: jquery autocomplete jqgrid free-jqgrid