Javascript 动态创建的HTML id,比较时如何使用eval?

Javascript 动态创建的HTML id,比较时如何使用eval?,javascript,Javascript,我在函数listInPorts中创建了一些动态ID复选框,并尝试在函数checkports中使用eval进行比较,以查看它们是否被选中。我可能误解了如何使用eval,因为它不会通过 function listInPorts() { console.log("listInPorts()"); var x = 0; portstring = "<table border='1' bgcolor=cyan width='199'>"; inputs = mid.inputs.v

我在函数listInPorts中创建了一些动态ID复选框,并尝试在函数checkports中使用eval进行比较,以查看它们是否被选中。我可能误解了如何使用eval,因为它不会通过

function listInPorts() {
  console.log("listInPorts()");
  var x = 0; portstring = "<table border='1' bgcolor=cyan width='199'>";
  inputs = mid.inputs.values();
  //List ports in and out
  Lportin = mid.inputs.values();
  for (listinput = Lportin.next(); listinput && !listinput.done;
    listinput = Lportin.next()) {
    var deviceIn = listinput.value.name;
    var optin = document.createElement("option");
    optin.text = deviceIn;
    //document.getElementById("in_portsel").add(optin);
    portstring = portstring + "<tr><td align=right><b>" + optin.text + "<input 
    id = 'inBox"+x+"' type = 'checkbox' checked > </b></td > </tr> ";
    x++;
  }
  document.getElementById("ports").innerHTML = portstring + "</table>";
}
function checkInPorts(mid) {
  var x = 0;
  inputs = mid.inputs.values();
  for (var input = inputs.next(); input && !input.done; input =
    inputs.next()) {
    if (eval("document.getElementById.('inBox" + x + "').checked") == false) { }
    else if (eval("document.getElementById.('inBox" + x + "').checked") == true) { input.value.onmidimessage = onMIDIMessage; }
    x++;
    //input.value.onmidimessage = onMIDIMessage;
  }
}

如果我只打开所有端口,而不尝试检查复选框是否已选中,则我知道代码正在工作。因此,必须是字符串到变量的eval转换/创建不起作用。

为什么要使用eval进行基本元素查找

if (document.getElementById('inBox' + x).checked) {
  console.log(x, "It is checked")
} else {
  console.log(x, "It is not checked")
}

不要使用EVAL。这是基本的字符串连接。eval是邪恶的。您必须添加CSP的不安全评估以消除安全警报。为什么要创建选项元素?你不会把它附加到任何东西上。。。另外,在getElementById之后还有一个额外的句点。但是,正如其他人所说,这里不需要评估。你不需要评估,很少需要评估。只需使用document.getElementById'inBox+x+'。选中后,它将是同一个'inBox'+x将返回可以用作getElementById参数的字符串,但在getElementById之后删除额外的点时出错。这是语法错误。不确定我做错了什么,但我确实需要评估,以下是解决方案。函数checkInPortsmid{var x=0;inputs=mid.inputs.values;for var input=inputs.next;input&&!input.done;input=inputs.next{varString=document.getElementById'inBox+x+'。选中;console.log********+varString;var myVar=evalvarString;ifmyVar==false{}否则ifmyVar==true{input.value.onmidMessage=onmidMessage;}x++;}}请更正您的报价错误,在第一行中使用单引号或双引号。@SparkCountain您也可以编辑它;是的,但前提是我至少更改了六个字符,并且我不想添加或删除不必要的内容。因为您拥有的内容与我拥有的不匹配。您拥有myVar=document.getElementById'inBox+x+'w这是说你的id是“收件箱+x+”不在BOX1中不确定我做错了什么,但我确实需要评估,这是解决方案。函数checkInPortsmid{var x=0;inputs=mid.inputs.values;for var input=inputs.next;input&!input.done;input=inputs.next{varString=document.getElementById'inBox+x+'。选中;console.log*********+varString;var-myVar=evalvarString;ifmyVar==false{}否则ifmyVar==true{input.value.onmidMessage=onmidMessage;}x++;}