2012-04-11 3 views
1

Можно ли как-то остановить ячейку от входа в режим редактирования, когда ловить событие beforeCellEdit?Предотвращение ввода jqGrid в редактирование ячейки с использованием события beforeCellEdit?

beforeEditCell: function (rowid, cellname, value, irow, icol) { 
    if (cellname != 'aSpecificCol') 
     return; 

    var grid = $("#grid"); 

    if (aCondition == "something") 
     grid.setColProp('aSpecificCol', { editable: false }); 
    else 
     grid.setColProp('aSpecificCol', { editable: true }); 
} 

Событие срабатывает, но настройка свойства столбца, похоже, не изменяет режим редактирования.

+0

Небольшое примечание: вы являетесь участником stackoverflow, так как более 3 лет, и вы проголосовали за некоторые вопросы или ответы только 55 раз. Вы имеете право проголосовать около 30 вопросов или ответов ** в день ** (см. [Здесь] (http://meta.stackexchange.com/a/5213/147495)). Основная цель или голосование - это советы для поискового механизма, ответы на которые и вопросы ** полезны **. Ответы «Принятые» не должны действительно решать проблему, поэтому ее можно будет рассчитать по-другому. Поэтому, если вы хотите * помочь другим пользователям stackoverflow найти полезную информацию *, вы должны использовать свое право голоса больше. – Oleg

ответ

6

Метод beforeEditCell будет вызываться в середине процесса редактирования. Он существует, главным образом, для инициализации нового созданного элемента ввода или выбора.

Если вам необходимо предотвратить некоторые клетки от редактирования в режиме редактирования ячейки я Архиваторы предложить вам либо установить "not-editable-cell" класс в клетке иногда и раньше (например, в cellattr или в loadComplete) или использовать beforeSelectRow для возврата false для некоторых клеток. Это beforeSelectRow return false ячейка не будет редактироваться.

beforeSelectRow: function (rowid, e) { 
    var $td = $(e.target).closest("td"), iCol = $.jgrid.getCellIndex($td[0]); 
    if (/* test some rules here */) { 
     return false; // prevent selection and so the editing of the cell 
    } 
} 
0

Правильно, вам нужно найти другую альтернативу, потому что beforeEditCell предоставляет только средство для выполнения большего количества кода до редактирования ячейки. От grid.celledit.js:

if ($.isFunction($t.p.beforeEditCell)) { 
    $t.p.beforeEditCell.call($t, $t.rows[iRow].id,nm,tmp,iRow,iCol); 
} 

Однако, кажется, что вы должны быть в состоянии назвать restoreCell для предотвращения режима редактирования:

restoreCell

IRow, iCol

восстанавливает отредактированный содержимое ячейки с индексом строки iRow (не смешивать с rowid) в индексном столбце iCol

Например:

beforeEditCell: function (rowid, cellname, value, irow, icol) { 
    var grid = $("#grid"); 
    if (cellname != 'aSpecificCol') { 
     grid.jqGrid("restoreCell", irow, icol); 
     return; 
    } 

Если это не работает, вы можете попробовать добавить этот код в afterEditCell случае вместо этого, что может быть более подходящим местом.

+0

Действительно хорошая идея, но, к сожалению, она не сработала, либо с beforeEditCell, и после EditCell. – kaze

Смежные вопросы