2016-11-03 14 views
1

У меня есть handsontable со следующими данными.JQuery handsontable после рендера делает ячейку только для чтения по отношению к другому значению ячейки - не работает

var data = [ 
    ["2008", 10, 11, 12, 1], 
    ["2009", 20, 11, 14, 0], 
    ["2010", 30, 15, 12, 1] 
    ]; 

Ссылка: FIDDLE

Что мне нужно положить в последнем столбце, если значение равно 0, то мне нужна соответствующий столбец, содержащий второй и третий столбец Его сделать неизменяемым.

Пожалуйста, обратите внимание на следующее изображение для более подробно:

enter image description here

метод Handontable рендерер, что нужно использовать. То, что я использовал это следующим образом:

,

Handsontable.hooks.add('afterRender', function() { 
var a = $('.htCore').find('tbody tr td:nth-child(2)'); 
var b = $('.htCore').find('tbody tr td:nth-child(3)'); 
var g = $('.htCore').find('tbody tr td:nth-child(4)'); 

g.each(function (i, v) { 
if (parseFloat(g.eq(i).text()) == 0)) { 
    a.eq(i).attr('readonly',true); 
    b.eq(i).attr('readonly',true); 
}); 

Но не работает, пожалуйста, руководство меня ....

+0

@ZekeDroid, пожалуйста, помогите приятелю – Santhucool

ответ

1

Вам не нужно использовать JQuery для обновления READONLY атрибут.

Вы должны создать свойство ячейки, как мой пример:

http://jsfiddle.net/vgaybtvp/

cells: function (row, col, prop) { 
    var cellProperties = {}; 
    var hot = this.instance; 

    if((col == 2 || col == 3) && hot.getDataAtCell(row, hot.colToProp(4)) == 0) { 
     cellProperties.readOnly = true; 
    } else { 
     cellProperties.readOnly = false; 
    } 

    return cellProperties; 
} 

С уважением

+0

Спасибо, дружище, это хороший хак !! – Santhucool

1

То, что вы можете использовать это свойство только для чтения уже включен в Handsontable. Смотрите ниже функции я зову, когда таблица инициализируется, и после любого изменения:

function updateTableReadOnly() { 
    var cellPropertiesID; 
    for (var i = 0; i < $("#example1grid").handsontable('getData').length; i++) { 
    if ($("#example1grid").handsontable('getData')[i][4] === '0') { 
     updateCellReadOnly(i,2,true) 
     updateCellReadOnly(i,3,true) 
    } else { 
     updateCellReadOnly(i,2,false) 
     updateCellReadOnly(i,3,false) 
    } 
    } 
    $("#example1grid").handsontable('render'); 
} 

function updateCellReadOnly(i,j,value) { 
    cellPropertiesID = $("#example1grid").handsontable('getCellMeta',i,j); 
    cellPropertiesID.readOnly = value; 
} 

Пожалуйста, смотрите your fiddle updated для моего рабочего примера.

Обратите внимание, что я изменил ваши данные, чтобы проверить ваше состояние с помощью String значение.

var data = [ 
    ["2008", "10", "11", "12", "1"], 
    ["2009", "20", "11", "14", "0"], 
    ["2010", "30", "15", "12", "1"] 
], 

Причина в том, если вам нужно изменить свои данные непосредственно в таблице, то новое значение вы войдете будет Строка. Таким образом колонка Nissan и Toyota изменяет свойства динамически в зависимости от значения Honda. Который, я полагаю, вы хотели достичь здесь.

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

  • Нет связанных вопросов^_^