使用按钮执行验证

时间:2015-10-21 19:52:08

标签: handsontable

我希望点击按钮而不是更改单元格来执行Handsontable验证。这样的事情:validateCells()(返回bool isValid)。这个功能对我来说似乎没什么用。

var
data = [],
container = document.getElementById('hot-Handsontable'),
save = document.getElementById('save'),
hidden = document.getElementById('hot-Handsontable-value'),
hot,
hotIsValid = true,
emailValidator;

emptyValidator = function(value, callback) {
  callback(false);
};

hot = Handsontable(container, {
  data: data,
  minRows: 1,
  minCols: 21,
  maxCols: 21,
  minSpareRows: 1,
  stretchH: 'all',
  colHeaders: ['Test'],
  columns: [{data:'Test',allowInvalid:true, validator: emptyValidator}]
});

// exclude empty rows from validation
$('.title-block .united-alert a[href^=#Handsontable]').click(function() {
  var href = $(this).attr('href');
  var row = href.getIdIndex();
  var prop = /([^__]*)$/.exec(href)[0];

  hot.selectCellByProp(parseInt(row), prop);
  return false;
});

// Save event
Handsontable.Dom.addEvent(save, 'click', function(e) {
  var test = hot.validateCells(); // test is undefined

  if (hotIsValid === true) {
    hidden.value = JSON.stringify(hot.getData());
  } else {
    e.preventDefault();
  }
});

1 个答案:

答案 0 :(得分:1)

您应该做的事情,而不是var test = hot.validateCells()如下:

// Save event
Handsontable.Dom.addEvent(save, 'click', function(e) {
  hot.validateCells(function(hotIsValid) {
    if (hotIsValid === true) {
      hidden.value = JSON.stringify(hot.getData());
    } else {
      e.preventDefault();
    }
  })
});

请注意validateCells接受回调并返回undefined。这就是您将test视为undefined的原因。另外需要注意的是,对表中的每个单元格执行回调,所以要小心。