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, если мышь будет над кнопками действий. Таким образом, вы сможете сортировать строки только в другом столбце.

Вы можете увидеть модифицированную демо здесь.

Другие вопросы по тегам