if语句的计算结果为false后,Javascript控制台日志清除自身

时间:2013-01-03 23:21:04

标签: javascript logging if-statement console clear

我在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;

4 个答案:

答案 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();在您的回调函数中