How can I change the color of a changed cell in Handsontable?

后端 未结 1 1684
陌清茗
陌清茗 2021-01-25 13:20

I am using the Handsontable plugin and when the user changes the values in the cell, it should turn yellow so they can keep track of what has been changed. In this case, yellow

相关标签:
1条回答
  • 2021-01-25 13:57

    to mark every cell that have change you can create a custom renderer and apply only if data("change") exists like this

    //Custom renderer add class if the element have the data "change"
    var myRenderer = function (instance, td, row, col, prop, value, cellProperties) {
      Handsontable.TextCell.renderer.apply(this, arguments);
      if($(td).data("change")){
          $(td).addClass('changeInput');
      }
    };     
    $('#example').handsontable({
    data: data,
    minSpareRows: 1,
    colHeaders: true,
    contextMenu: true,
      cells: function (row, col, prop) {//set the new renderer for every cell
        return {type: {renderer: myRenderer}};
      }
    });
    //afterChange get every cell and add class and data
    $('#example').handsontable('getInstance').addHook('afterChange', function(changes) {
      var ele=this;
      $.each(changes, function (index, element) {
                $(ele.getCell(element[0],element[1])).addClass('changeInput').data("change",true);
    });
    
    $("#example").on("keyup","textarea.handsontableInput",function (){
    $(this).addClass('changeInput');
    }).on("blur","textarea.handsontableInput",function (){
    $(this).removeClass('changeInput');
    });       
    

    http://jsfiddle.net/PAH5J/8/
    EDIT
    to move the highlighted area you can use the cellProperties instead of .data() like this

    var myRenderer = function (instance, td, row, col, prop, value, cellProperties) {
         Handsontable.TextCell.renderer.apply(this, arguments);
         if (cellProperties.change) {//check for new property change in the cell
             $(td).addClass('changeInput'); //add the changeInput class to the actual td
         }
    };    
    $('#example1').handsontable('getInstance').addHook('afterChange', function(changes) {
        var ele=this;
        $.each(changes, function (index, element) {
             //add the changeInput class to the actual td
             $(ele.getCell(element[0],ele.propToCol(element[1]))).addClass('changeInput')
             //get the cell properties and create a new one "change"     
             //to check in the renderer
             ele.getCellMeta(element[0],ele.propToCol(element[1])).change=true;
        });    
    });
    
    0 讨论(0)
提交回复
热议问题