Handsontable 下拉错误 (0.13)
Handsontable Dropdown Bug (0.13)
如果我更改 1 个下拉列表,则所有剩余的行将具有相同的值。
var $container = $(".spreadsheet_div_" + package_id);
$container.handsontable({
data: res,
rowHeaders: true,
minSpareRows: 0,
contextMenu: false,
startRows: qty,
startCols: length,
colHeaders: result.field_headers,
colWidths: result.field_widths,
columns: result.field_type
});
这是一个示例输出图像。
http://postimg.org/image/83e9zoak3/
这里是示例控制台日志。数据数组
- 数据
- colHeaders
- 列(用于下拉列表)
这是 jsfiddle:https://jsfiddle.net/fatluke/ao45uhzn/
好的,感谢您发布 jsfiddle。这是您的问题:
你可能知道也可能不知道,在JS中,当你声明一个数组时,数组中的每个元素都是一个对象的引用。如果您要推送整数,这不是问题,因为您每次都会引用一个新的整数。
但是,在您的 parse JSON 方法中,您多次将同一个对象引用推送到数据数组。我不知道为什么你一开始会一遍又一遍地推送相同的数据,但如果你想这样做,你需要每次都克隆对象。
发生的情况是每一行都具有对原始数据对象的相同引用。当您在 handsontable 中进行修改时,它会修改所有元素指向的唯一对象,因此会修改每一行。
同样,一个简单的解决方案是在推送之前克隆对象。否则,你会有这种看起来很滑稽的行为。
编辑:
要测试这个(我已经做过并且它有效)只需提供你的 data
数组复制粘贴数据并将 JSON 方法中的循环更改为 data[i] 而不是 data[ 0]。你会看到它现在工作正常。
如果我更改 1 个下拉列表,则所有剩余的行将具有相同的值。
var $container = $(".spreadsheet_div_" + package_id);
$container.handsontable({
data: res,
rowHeaders: true,
minSpareRows: 0,
contextMenu: false,
startRows: qty,
startCols: length,
colHeaders: result.field_headers,
colWidths: result.field_widths,
columns: result.field_type
});
这是一个示例输出图像。 http://postimg.org/image/83e9zoak3/
这里是示例控制台日志。数据数组
- 数据
- colHeaders
- 列(用于下拉列表)
这是 jsfiddle:https://jsfiddle.net/fatluke/ao45uhzn/
好的,感谢您发布 jsfiddle。这是您的问题:
你可能知道也可能不知道,在JS中,当你声明一个数组时,数组中的每个元素都是一个对象的引用。如果您要推送整数,这不是问题,因为您每次都会引用一个新的整数。
但是,在您的 parse JSON 方法中,您多次将同一个对象引用推送到数据数组。我不知道为什么你一开始会一遍又一遍地推送相同的数据,但如果你想这样做,你需要每次都克隆对象。
发生的情况是每一行都具有对原始数据对象的相同引用。当您在 handsontable 中进行修改时,它会修改所有元素指向的唯一对象,因此会修改每一行。
同样,一个简单的解决方案是在推送之前克隆对象。否则,你会有这种看起来很滑稽的行为。
编辑:
要测试这个(我已经做过并且它有效)只需提供你的 data
数组复制粘贴数据并将 JSON 方法中的循环更改为 data[i] 而不是 data[ 0]。你会看到它现在工作正常。