我正在将一个包含字符串和数字的参数传递给嵌套函数bu,但在参数列表后始终出现以下错误“未捕获的SyntaxError:missing),这是代码:
我尝试过使用单引号和双引号的不同组合,并且我也尝试不进行串联,但这都无济于事。
getData("Some list");
function buildTable(tblIDName, lstName, tblData){
var id=3;
var addTbl = document.querySelector("#myTbl");
var newRow = addTbl.insertRow(1);
for (i=0; i<tblData.length; i++){
var cell = newRow.insertCell(i);
cell.innerHTML = "<input type='text'
onchange='update("+id+","+lstName+")' value='"+tblData[i]+"''>"; //<-Error points to this line
}
}
function getData(listName){
var tblData = ['col 1 data','col 2 data', 'col 3 data'];
if (listName == 'Some list'){
buildTable("#Benefits", listName, tblData)
}else if (listName == 'Some Other List'){
buildTable("#Assurance", listName)
}
}
function update(id,lst){
alert(id);
alert(lst);
}
触发onchange时,我希望update()执行。
这是一个codepen:https://codepen.io/isogunro/pen/NexbEP?editors=0011
答案 0 :(得分:1)
对代码进行了一些清理,但是主要问题是字符串some list
被传递而没有被包装"some list"
document.addEventListener('DOMContentLoaded', function() {
// Don't try and build anything until the DOM is ready.
getData("Some list");
});
function buildTable(tblIDName, lstName, tblData) {
let id = 3;
let addTbl = document.querySelector(tblIDName);
let newRow = addTbl.insertRow(0);
tblData.forEach((td,i) => {
cell = newRow.insertCell(i);
// Note we needed to wrap string param correctly.
cell.innerHTML = `<input type='text'
onchange='update(${id},"${lstName}");'
value='${tblData[i]}'>`;
console.log(cell.innerHTML);
});
}
function getData(listName) {
let tblData = ['col 1 data', 'col 2 data', 'col 3 data'];
if (listName == 'Some list') {
buildTable("#Benefits", listName, tblData)
} else if (listName == 'Some Other List') {
buildTable("#Assurance", listName)
}
}
function update(id, lst) {
console.log(i);
console.log(l);
}
<table id="myTbl"></table>
<table id="Benefits"></table>
答案 1 :(得分:0)
我会尝试使用Notepad++或VS Code之类的东西,它们都是免费的源代码编辑器。如果文件甚至在尝试运行之前就出现语法错误,则特别是VS Code可以轻松地向您指出。
话虽如此,问题在于您如何尝试将更新作为单元格输入的事件来运行。基本上,这需要完全替换您设置cell.innerHTML
的那一行。
您需要的是首先创建输入元素,逐步进行操作。
var input = document.createElement('input');
创建完成后,我们可以像这样添加value
属性
input.setAttribute('value', tblData[i]);
接下来,当输入更改时,您必须添加事件处理程序。在该处理程序中,它将使用触发update
函数并将id
和lstName
作为参数传递。
input.addEventListener('change', function(event){
update(id, lstName);
});
最后,我们将其添加到cell
:
cell.appendChild(input);