Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript代码在单击按钮后消失_Javascript_Return - Fatal编程技术网

Javascript代码在单击按钮后消失

Javascript代码在单击按钮后消失,javascript,return,Javascript,Return,我正在尝试制作一个小计计算工具,但我无法继续,因为我不知道问题出在哪里。提交表单或单击按钮时,所有内容都会很快消失 这是小提琴:: 我不知道 function calcSub(){ var input = document.getElementById('fld'), subTotal = document.getElementById('sub-total'), tax = document.getElementById

我正在尝试制作一个小计计算工具,但我无法继续,因为我不知道问题出在哪里。提交表单或单击按钮时,所有内容都会很快消失

这是小提琴::

我不知道

    function calcSub(){

        var input = document.getElementById('fld'),
            subTotal = document.getElementById('sub-total'),
            tax = document.getElementById('tax'),
            total = document.getElementById('total');

        var subTotalCalc = input.value / 1.06;

        var flag = true;


        if(input.value == "" || input.value == null){
            alert("Please enter in a total!");
            return false;
        } else {
            subTotal.innerHTML = "Subtotal:" + " " + "$" + subTotalCalc;
            tax.innerHTML = "Tax:" + " " + "$" + input.value - subTotalCalc;
            total.innerHTML = input.value;
            return flag;
        }

    }

请注意另一个问题:必须在
(input.value-subtotalc)
周围使用括号。如果没有括号,您将尝试添加和减去字符串,这将导致
NaN

tax.innerHTML = "Tax:" + " " + "$" + (input.value - subTotalCalc);`

请注意另一个问题:必须在
(input.value-subtotalc)
周围使用括号。如果没有括号,您将尝试添加和减去字符串,这将导致
NaN

tax.innerHTML = "Tax:" + " " + "$" + (input.value - subTotalCalc);`

这是因为您的submit按钮实际上在某些操作上执行表单提交,并且页面正在刷新。有一些方法可以修复行为,例如:

将“提交”按钮设为一个按钮:
实际上你不需要表格

或将return false添加到onClick处理程序:

<button type="submit" onclick="calcSub(); return false;">Calculate</button><br>
计算

之所以会发生这种情况,是因为您的“提交”按钮实际上在某些操作中执行表单提交,并且页面正在刷新。有一些方法可以修复行为,例如:

将“提交”按钮设为一个按钮:
实际上你不需要表格

或将return false添加到onClick处理程序:

<button type="submit" onclick="calcSub(); return false;">Calculate</button><br>
计算

当您单击按钮时,您的表单将被提交,因此这些值会被计算出来,但在重新加载页面时会立即消失

尝试添加
onsubmit='return false;'添加到表单标记,页面重新加载将被阻止

或者,您可以将按钮类型更改为
按钮


选中此项。

当您单击按钮时,您的表单将被提交,因此这些值将被计算出来,但在重新加载页面时会立即消失

尝试添加
onsubmit='return false;'添加到表单标记,页面重新加载将被阻止

或者,您可以将按钮类型更改为
按钮


选中此项。

您需要阻止表单提交。表单可以由用户在表单元素处于焦点时按enter键提交,也可以通过单击
submit
按钮提交。即使
onclick
事件返回false,提交事件也不会更改。
我冒昧地用叉子叉了你的小提琴:

如果需要,我很乐意进一步解释代码…
请注意,这并不能解决JS在浮点精度方面的问题,如果您正在考虑就此问题提出后续问题!我在这里添加了一个简单的
toDecimal
函数:

var toDecimal = function(num, precision)
{
    precision = precision || 2;
    num = +(num || 0);
    return ( Math.round(num*Math.pow(10, precision))
             / Math.pow(10,precision)
           ).toFixed(precision);
};

因此,首先乘以10^n,四舍五入,再除以10^n,得到所需的浮点值。为了避免仍然可能发生的任何问题(虽然不应该有任何问题),我添加了一个
toFixed(n)
也可以调用。如果四舍五入的数字是
213.00

您需要阻止表单提交,这可能会很有用。表单元素处于焦点时,用户可以按enter键提交表单,或者单击
提交
按钮。即使
onclick
事件返回false,提交也会失败事件未被更改。
我冒昧地用叉子叉了你的小提琴:

如果需要,我很乐意进一步解释代码…
请注意,这并不能解决JS在浮点精度方面的问题,如果您正在考虑就此问题提出后续问题,!我在此处添加了一个简单的
toDecimal
函数:

var toDecimal = function(num, precision)
{
    precision = precision || 2;
    num = +(num || 0);
    return ( Math.round(num*Math.pow(10, precision))
             / Math.pow(10,precision)
           ).toFixed(precision);
};

因此,首先乘以10^n,再四舍五入,再除以10^n,得到所需的浮点值。为了避免仍然可能出现的任何问题(尽管不应该有任何问题,我添加了一个
toFixed(n)
也可以打电话。如果四舍五入的数字是
213.00

的话,这可能会很有用。只需从代码中删除所有
返回
,并在末尾添加
返回错误
,然后在末尾添加
返回错误

啊,我明白了。谢谢你的帮助!@mattnowrstech:也要对浮点感知问题感到厌倦,你正在偏离
1.06
,这将返回一个浮点。无论如何,浮点在二进制系统中是一个痛苦的问题。请查看我的答案以找到解决方法(第二部分,最后一段是你要查找的代码)啊,我明白了。谢谢你的帮助!@MattKnowsTech:也厌倦了浮点感知问题,你正在偏离
1.06
,这将返回一个浮点。无论如何,浮点是二进制系统中的一个难题。请检查我的答案,以找到解决这个问题的方法(第二个问题,最后一个代码片段就是你要寻找的代码)非常感谢Sergio。现在我知道了页面重新加载的原因。我想添加“onclick=”return calcSub();"当然可以。猜不到,哈哈。@mattnowstech只是想澄清一下:callind函数不会放弃本机行为,
返回false
会:D@Sergio如果函数返回一个
false
,那么事件将停止传播,OP将返回
true
@rps:事件将不会停止传播!仅当jQ事件callback将false返回给实际的事件处理程序。非常感谢Sergio。现在我知道页面重新加载的原因了。我想添加“onclick=”return calcSub();"当然可以。猜不到,哈哈。@mattnowstech只是想澄清一下:callind函数不会放弃本机行为,
返回false
会:D@Sergio如果函数返回一个
false
,那么事件将停止传播,OP将返回
true
@rps:事件将不会停止传播!仅当jQ事件callback将false返回给实际的事件处理程序。
return false
在我看来是不好的做法。在jQuery中
return false
起作用,但在VanillaJS中,它阻止了默认值,但没有阻止事件冒泡!!没有足够的人意识到这一点,因为