javascript - 单击按钮时发送行数据?
问题描述
我有下一个信息对象
var data = [
{
name: 'John Doe',
transactions: [{...},{...},{...}]
},
{...}
];
我将此数据插入到这样的表中:
function addRowsData(data) {
var table = document.getElementById('main-table');
var rowCount = table.rows.length;
var tBody = document.createElement('tbody');
table.appendChild(tBody);
for (var i = 0; i < data.length; i++) {
var info = data[i];
var tr = tBody.insertRow();
for(var key in info){
if(key == 'transactions') continue;
var td = document.createElement('td');
td.innerHTML = info[key];
tr.appendChild(td);
}
var tdButton = document.createElement('td');
var button = document.createElement('button');
var clientId = info.id;
button.setAttribute('type', 'button');
button.setAttribute('class', '"btn btn-primary');
button.setAttribute('id', clientId);
button.innerHTML = 'More'
tdButton.appendChild(button);
tr.appendChild(tdButton)
button.addEventListener('click', function() {
openModal(info.transactions);
});
}
}
function openModal(transactions) {
console.log(transactions);
var modal = document.getElementById('my-modal');
var close = document.getElementsByClassName('close')[0];
close.addEventListener('click', closeModal, false);
modal.style.display = 'block';
}
每行都有一个按钮,单击时会打开一个模式,在此模式上我想显示事务数组中的数据,我尝试这样做,openModal(info.transactions);
但这总是显示最后一个元素的数据。有没有办法做到这一点,当我点击行按钮时,我可以访问事务数组?
解决方案
在您的代码中,您info
在事件侦听器中引用。但是,变量info
在整个for
循环中都会发生变化,因此在 for 循环结束时,info 将是最后一个索引。要解决此问题info
,您可以传入 ,而不是传入eval(data[i])
,因此它将输入实际数据而不是更改的变量。
推荐阅读
- session - 如何使用 FLASK 临时存储上传的文件
- windows - 如果指针的最高位作为符号位会发生什么,有人可以举个例子来解释吗?
- c# - 通过C#在word文档中查找分栏符的位置
- node.js - 如何填充存在于猫鼬地图类型模式中的字段?
- scala - 显式指定泛型 apply 方法的类型有什么影响?
- svg - 用弧线填充 SVG 路径不正确
- php - Checkout-PHP-SDK 中的 PayPal Orders V2 收款人对象因金额错误而失败
- go - 内存没有被释放
- postgresql - 根据 Postgres 中一列(每组)的不同值选择行
- angular - 为什么 [ngClass]="{enable-dot: event.isDisable === false, disable-dot: event.isDisable === true}" 不能在角度工作?