将参数从我的函数传递到调用函数

时间:2019-01-06 00:36:51

标签: javascript

我正在将一个包含字符串和数字的参数传递给嵌套函数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

2 个答案:

答案 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函数并将idlstName作为参数传递。

input.addEventListener('change', function(event){
  update(id, lstName);
});

最后,我们将其添加到cell

cell.appendChild(input);