我在Modern Javascript练习中使用以下简单代码来计算球体的体积,它包含一个部分,用于检查以确保为半径输入了值。
我输入一个负数来测试函数,它可以工作,但我 对控制台中显示的内容感兴趣,所以我查了一下。我结束了 看到日志中的错误闪烁然后消失 - 太快阅读。
这恰好是if语句评估为false时发生的情况吗? 为什么显示此错误然后几乎被清除 立即?我知道我可以用另一种方式来调试它(也就是使用console.log或通过其他方式记录问题),我只是对这个错误消失的原因感兴趣。
HTML:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Volume of a Sphere Calculator</title>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<!-- sphere.html -->
<form action="" method="post" id="theForm">
<fieldset>
<p>Use this form to calculate the volume of a sphere.</p>
<div>
<label for="radius">Radius</label>
<input type="text" name="radius" id="radius" required></div>
<div>
<label for="volume">Volume</label>
<input type="text" name="volume" id="volume"></div>
<div>
<input type="submit" value="Calculate" id="submit"></div>
</fieldset>
</form>
<script src="js/sphere.js"></script>
</body>
</html>
JS:
function calculate() {
'use strict';
var volume;
var radius = document.getElementById('radius');
if (radius && (radius.value > 0)){
volume = (4/3) * Math.PI * Math.pow(radius.value, 3);
}
volume = volume.toFixed(4);
document.getElementById('volume').value = volume;
return false;
}
function init() {
'use strict';
var theForm = document.getElementById('theForm');
theForm.onsubmit = calculate;
}
window.onload = init;
答案 0 :(得分:2)
因为这是我对我的console.log输出问题出现并迅速消失的谷歌的最佳匹配,所以这发生在我身上,因为我有一组空的标签标签不合适或一个没有动作的表单。删除这些标记会导致JavaScript和console.log()按原样运行。
答案 1 :(得分:1)
为Google搜索“ javascript日志消失”添加了另一个解决方案,使我来到这里。
页面刷新/导航是问题所在。
按照mateuszb的注释在控制台设置中选择“保留日志”即可解决此问题。
答案 2 :(得分:0)
由于undefined
没有引发错误的方法toFixed
,因此阻止Calculate
到达return false;
由于永远不会到达该行,因此表单会提交,通常会将表单发布到同一页面。
当页面重新加载时,控制台将被重置(我相信这取决于特定的浏览器)。
要解决此问题,请将volume
初始化为0
。
答案 3 :(得分:0)
您可以使用el.preventDefault();在您的回调函数中