У меня есть экземпляр jqGrid, который отличается множественным выбором и встроенным редактированием.Я написал некоторый код в событии beforeSelectRow
, чтобы множественный выбор можно было получить с помощью клавиши Ctrl, а выбор диапазона - с помощью клавиши Shift;а также одиночный выбор без нажатия какой-либо горячей клавиши.Чтобы включить встроенное редактирование, я позвоню editRow
, когда строка будет выбрана дважды.Однако я сталкиваюсь с двумя странными проблемами:
- Щелчок по элементу ввода любого поля редактируемой строки приведет к тому, что строка будет «отменена»
- После перезапуска- выбрав другую строку для перехода в режим редактирования, предыдущая выбранная строка не может быть восстановлена, даже если
restoreRow
правильно вызван в целевой строке.
- EDITED -
Выберите строку
Выберите строку еще раз, чтобы перейти в режим редактирования
Сфокусируйте поле ввода,отменяет выбор строки
Выбор и редактирование другой строки, предыдущая строка не может быть восстановлена.
- КОД -
beforeSelectRow: function (rowid, e) {
var $this = $(this);
var url_for_save_edit = this.p.editurl;
var last_selected_row = this.p.selrow;
var cur_selected_rows = $this.data(key_selected_rows);
if (true == e.shiftKey) {
if (rowid != last_selected) {
var min = parseInt((rowid < last_selected_row ) ? rowid : last_selected_row );
var max = parseInt((rowid > last_selected_row ) ? rowid : last_selected_row );
for (var i = min + 1; i < max; i++) {
$this.jqGrid(method_setSelection, i, false);
}
}
} else if (false == e.ctrlKey) {
$this.resetSelection();
if (!$.string.isNullOrEmpty(url_for_save_edit)) {
if (!$.isNull(cur_selected_rows) && (cur_selected_rows.length <= 1) && (rowid == last_selected_row)) {
var curr_edit_row = $this.data(key_curr_edit_row);
console.log('>>>>> curr selected rows = ', cur_selected_rows, ', last selected row = ', last_selected_row, 'curr editing row = ', curr_edit_row, ', to be editable row: ', rowid);
if (rowid != curr_edit_row) {
if (!$.isNull(curr_edit_row)) {
console.log('>>>>> restoring row ', curr_edit_row);
$this.jqGrid('restoreRow', curr_edit_row, null);
}
console.log('>>>>> set row as editable: ', rowid);
$this.jqGrid('editRow', rowid, false, null, null, null, null, null, null, null);
$this.data(key_curr_edit_row, rowid);
}
}
}
}
return true;
}