这道例题来自《JavaScipt从入门到精通》(第三版)中的【例6.6】。
书中给出的代码如下:
<body>
<div id="result"> 产生的验证码:</div>
<input type="button" name="Submit" class="go-wenbenkuang" value="生成" onclick="deal()">
<script>
function checkCode(digit){
var result = "";
for(i=0;i<parseInt(digit);i++){
result = result + (parseInt(Math.random()*10)).toString();
}
return result;
}
</script>
<script>
function deal(){
result.innerHTML = " 产生的验证码:" + checkCode(form1.digit.value);
}
</script>
</body>
浏览器显示效果:
点击“生成“按钮并没有获得想要的效果。说明程序出现了BUG。这里就体现的本书对于自学的初级者的不友好。不过,有BUG,找出BUG 再到解决BUG也是这个世界变强方式之一。当然我也相信,对于作者一定也会在后续的版本中有所改善。
修改后的代码:
<body>
<div id="result"> 产生的验证码:</div>
<form name="form1">
位数:<input type="text" id="num">
<input type="button" name="Submit" class="go-wenbenkuang" value="生成" onclick="deal()">
</form>
<script>
function checkCode(digit){
var result = "";
for(let i=0;i < digit;i++){
result = result + (parseInt(Math.random()*10)).toString();
}
return result;
}
function deal(){
var result = document.getElementById("result");
var num = document.getElementById("num").value;
result.innerHTML = " 产生的验证码:" + checkCode(num);
}
</script>
</body>
改动处:
1.添加一个文本标签,用于接收想要获得验证码的位数。
2.改善了deal()方法。
在deal 方法中的result并不是checkCode方法中的变量。而是通过ID的形式获得的div对象。
3.在for循环中变量i,作为局部变量,使用let修饰可以缩短变量的生命周期,减少占用的内存。
浏览器显示效果:
点击按钮前
点击按钮后
总结:即便输出了结果,但是对于这个程序还有很大的完善空间。例如:外观,逻辑等方面。