Datatable行下拉选项点击时调用JS函数并传行参数,解决meta未定义报错
报错原因
meta是Datatable的render回调函数的局部参数,仅在render函数运行时有效。你直接将meta.row写在onchange的HTML属性字符串中,下拉框触发事件时会在全局作用域查找meta变量,全局作用域不存在该变量,因此抛出找不到变量的错误。
修复方法
修改render函数中拼接下拉框字符串的逻辑,将meta.row的实际值拼入字符串即可:
"render": function(data, type, row, meta){ if (data == 'no_denunciado') { // 把meta.row的数值拼到字符串里,不要直接写meta.row变量名 data = '<select onchange="myFunction(this, '+ meta.row +')">' + '<option value="no_denunciado">' + data + '</option>' + '<option value="nuevo">Nuevo</option>' + '<option value="en_gestion">En Gestion</option>' + '<option value="baja_edenor">Baja</option>' + '</select>'; } // 原有剩余逻辑保持不变 }
如果需要传入整行的原始数据而非仅行号,可以使用如下写法:
"render": function(data, type, row, meta){ if (data == 'no_denunciado') { // 将行数据转成JSON字符串并转义引号,避免和HTML属性的引号冲突 const rowJson = JSON.stringify(row).replaceAll('"', '"'); data = '<select onchange=\'myFunction(this, '+ rowJson +')\'>' + '<option value="no_denunciado">' + data + '</option>' + '<option value="nuevo">Nuevo</option>' + '<option value="en_gestion">En Gestion</option>' + '<option value="baja_edenor">Baja</option>' + '</select>'; } // 原有剩余逻辑保持不变 }
此时myFunction的第二个参数就是当前行的完整数据,可以直接读取row._id等字段使用。
- 额外规范提示:HTML中id属性必须全局唯一,原有代码给所有下拉框设置了相同的
id="status"不符合规范,建议删除该id属性,或者拼接行号生成唯一id,例如id="status_'+meta.row+'"
内容的提问来源于stack exchange,提问作者Martin Bouhier
相关产品推荐
相关产品推荐

