我正在使用带浮点数的handsontable 0.35.1。目的是允许用户从电子表格(和在excel中打开的csvs)复制粘贴。问题是,它带有一些我需要摆脱的垃圾。未正确验证输入的一些示例如下:
1,000.00
USD 100.00
'10000.00 ' //note there are trailing spaces
我想找到一种在输入之前就可以操纵输入的方法。到目前为止,我发现的唯一方法是使用beforeChange,但是问题是验证。系统更改了输入,但似乎已经进行了验证。如果我模糊并再次模糊,则可以。
这里是fiddle。重现步骤:输入数字a123-应将其更正为123并验证为正确的数字。
我尝试使用beforeValidation代替,但是它并没有按照我的预期工作。
答案 0 :(得分:1)
我更新了示例https://jsfiddle.net/fma4uge8/29/,该示例可以全部实现1种功能。
function trimFloat(value) {
return value.trim().replace(/[^0-9\.\-\+]/g, '');
}
options = {
columns: [
{ type: 'date' },
{ type: 'numeric', numericFormat: {pattern: '0,0.00'}, trimWhitespace: true }
],
colHeaders: ["Date", "Float"],
beforeChange: function(changes, source){
let that = this;
_.each(changes, function(change){
if (_.isString(change[3])) {
let value = trimFloat(change[3]);
//prevent endless loop
if (value !== change[3]) {
change[3] = trimFloat(change[3]);
that.setDataAtCell(change[0], change[1], change[3]);
}
}
})
}
}
$('#hot-sheet').handsontable(options)
答案 1 :(得分:1)
您可以使用beforePaste
回调来清理输入
options = {
columns: [
{ type: 'date' },
{ type: 'numeric', numericFormat: {pattern: '0,0.00'} }
],
colHeaders: ["Date", "Float"],
beforePaste: (data, coords) => {
data.forEach((col, colIndex) => {
col.forEach((row, rowIndex) => {
let value = row.trim().replace(/[^0-9\.\-\+]/g, '')
data[colIndex][rowIndex] = value
})
})
return true
},
}
$('#hot-sheet').handsontable(options)
这是小提琴https://jsfiddle.net/xpvt214o/348195/
注意:您无法创建新的数据数组,必须更新数据数组而不是创建新的数据数组。