JQGrid: beforeSelectRow и sortableRows - исключить возможность перетаскивания столбца?
Я использую предложение Oleg, чтобы использовать beforeSelectRow
событие для обработки кликов по ячейкам в моей сетке.
Код Олега в его ответе (который мне точно подражает):
Вы можете определить столбцы с помощью кнопок, как показано ниже
{ name: 'add', width: 18, sortable: false, search: false,
formatter:function(){
return "<span class='ui-icon ui-icon-plus'></span>"
}}
В приведенном выше коде я использую пользовательский форматер jqGrid, но без привязки к событию. Код
beforeSelectRow: function (rowid, e) {
var iCol = $.jgrid.getCellIndex(e.target);
if (iCol >= firstButtonColumnIndex) {
alert("rowid="+rowid+"\nButton name: "+buttonNames[iCol]);
}
// prevent row selection if one click on the button
return (iCol >= firstButtonColumnIndex)? false: true;
}
где
firstButtonColumnIndex = 8
а такжеbuttonNames = {8:'Add',9:'Edit',10:'Remove',11:'Details'}
, В своем коде вы можете заменить предупреждение на соответствующий вызов функции.
Проблема в том, что моя сетка также сортируется (я использую sortableRows
метод на моей сетке). Если пользователь слегка щелкает мышью при нажатии на ячейку, beforeSelectRow
событие никогда не вызывается (сортируемое событие).
Это желательно в большинстве ситуаций - однако, я думаю, что бы исправить это, чтобы каким-то образом исключить столбцы из "ручек", чтобы перетащить (отсортировать) строку и позволить onSelectRow
триггер события в этих столбцах. Я просто не могу понять, как это сделать! Любая помощь очень ценится:)
1 ответ
Вы можете решить проблему, добавив следующий дополнительный код
var grid = $('#list'), tbody = $("tbody:first",grid[0]), ptr, td;
grid.bind('mouseover',function(e) {
var iCol = $.jgrid.getCellIndex(e.target);
if (iCol >= firstButtonColumnIndex) {
tbody.sortable("disable");
} else {
tbody.sortable("enable");
}
});
код будет отключать сортируемую функцию jqGrid, если мышь будет над кнопками действий. Таким образом, вы сможете сортировать строки только в другом столбце.
Вы можете увидеть модифицированную демо здесь.