Javascript 动态创建的HTML id,比较时如何使用eval?
我在函数listInPorts中创建了一些动态ID复选框,并尝试在函数checkports中使用eval进行比较,以查看它们是否被选中。我可能误解了如何使用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
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++;}