这里我试图在javascript中动态构造表格,包含多个文本字段,并尝试在javascript中使用这些值进行计算
HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CGPA Calculator</title>
<script type="text/javascript" src="test.js">
</script>
<style type="text/css">
div{
background-color:orange;
border-style:solid;
padding:50px;
}
button{
font-size:30px;
background-color:white;
border:none;
}
table{
margin:auto;
font-size:25px;
}
input{
margin-left:40px;
font-size:25px;
}
</style>
</head>
<body>
<div id="myTable"></div>
</body>
</html>
的Javascript 这里在javascript文档中我通过它的id获取div元素并使用innerhtml创建表,具体取决于用户的输入,但是当我想获取表中输入字段中的值时,即在calculateCGPA函数的for循环内的getElementById返回null之后第一次迭代
// JavaScript Document
function calculateCGPA(no_sem)
{
var credits = new Array(no_sem+1);
var grade = new Array(no_sem+1);
for(var n=1;n<=no_sem;n++)
{
credits[n] = new Array(7);
grade[n]= new Array(7);
}
var count=parseInt(1);
for(var i=1;i<=no_sem;i++)
{
for(var j=1;j<=6;j++)
{
var elem = document.getElementById(count);
document.writeln(elem);
count++;
}
}
}
function start()
{
var no_sem = parseInt(window.prompt("Enter the number of semester "));
var tablediv = document.getElementById('myTable');
if(no_sem>=1 && no_sem<=8)
{
var count = parseInt(1);
for(var i=1;i<=no_sem;i++)
{
tablediv.innerHTML = tablediv.innerHTML+ "<table border =0><tbody><caption>Semester " + i + "</caption>";
for(var j=1;j<=6;j++)
{
tablediv.innerHTML = tablediv.innerHTML + "<tr><td>Subject "+j+"</td><td></td><td><input id="+count+" type='text' maxlength=5 size=5></td></tr><br><br>";
count = count+1;
}
tablediv.innerHTML = tablediv.innerHTML + "</tbody></table>";
}
tablediv.innerHTML = tablediv.innerHTML + "<table><tr><td><button id = 'button' onclick = 'calculateCGPA("+no_sem+")'>Submit</button></td></tr></table><br><br>";
}
else
{
window.alert("Please enter a number between 1 and 8");
}
}
window.addEventListener("load",start,false);
我的输入标记ID是唯一的
答案 0 :(得分:1)
您的代码存在很大问题。这就是每当你做document.writeln(elem);
时它立即用你的元素替换整个文档HTML代码,所以当时你的所有id都丢失了以前的页面。那么为什么下一个循环执行它将无法获取id =&#34; 2&#34;元素了。
继续在for循环中的数组中推送这些数据,然后一次for循环结束,执行此操作document.write(arr)
。
同样,当您理想地获取元素时,不应传递数字而是传递字符串 -
var elem = document.getElementById(count.toString());
答案 1 :(得分:0)
您不能使用innerHTML
来连接部分HTML代码,因为DOM帽子随时都有效。
所以你的:
tablediv.innerHTML = tablediv.innerHTML
+ "<table border =0><tbody><caption>Semester "
+ i + "</caption>";
与写作相同:
tablediv.innerHTML = tablediv.innerHTML
+ "<table border =0><tbody><caption>Semester "
+ i + "</caption></tbody></table>";
因为浏览器会自动添加缺失的</tbody></table>
。
您需要在临时字符串中构建html,直到它完成,然后再将其分配给tablediv.innerHTML
。
在开始搜索其他错误之前,首先必须修复html代码的创建。
除此之外,您应该阅读document.writeln
的内容:
注意:当document.write写入文档流时,在已关闭(加载)的文档上调用document.write会自动调用document.open,这将清除文档。