纯JavaScript解决方案编号输入将显示2位小数

纯JavaScript解决方案编号输入将显示2位小数,javascript,html,cross-browser,decimal,Javascript,Html,Cross Browser,Decimal,我试图使用以下代码(在此处找到:)在输入失去焦点/onchange时强制数字输入显示两位小数: function setDecimal(event) { this.value = parseFloat(this.value).toFixed(2); } <input placeholder="$0.00" type="number" onchange="setDecimal" name="amount_20_20_amt" id="amount_20_20_amt" value=

我试图使用以下代码(在此处找到:)在输入失去焦点/onchange时强制数字输入显示两位小数:

function setDecimal(event) {
    this.value = parseFloat(this.value).toFixed(2);
}

<input placeholder="$0.00" type="number" onchange="setDecimal" name="amount_20_20_amt" id="amount_20_20_amt" value="" autocomplete="off" min="0" max="50000000" step="0.01">
我不能使用jQuery或任何其他库(业务规则),我需要它在输入失去焦点时显示。将步骤调整为“.01”或“任意”无法完成此操作

JS存储在一个加载良好的.JS文件中,而.JS文件中的其他所有内容都运行良好,因此我认为这一定是代码段中的错误,尽管我不知道是什么原因


哪里出错了?

您需要在
onchange
中调用函数。目前,您只是在引用它

更改此项:

onchange="setDecimal"
……为此:

onchange="setDecimal(this)"
将输入传递给函数

然后将函数更改为:

function setDecimal(input) {
  input.value = parseFloat(input.value).toFixed(2);
}
函数setDecimal(输入){
input.value=parseFloat(input.value).toFixed(2);
}

您需要在
onchange
中调用函数。目前,您只是在引用它

更改此项:

onchange="setDecimal"
……为此:

onchange="setDecimal(this)"
将输入传递给函数

然后将函数更改为:

function setDecimal(input) {
  input.value = parseFloat(input.value).toFixed(2);
}
函数setDecimal(输入){
input.value=parseFloat(input.value).toFixed(2);
}

无论何时调用函数,
都是根据调用函数的方式设置的。如果对对象调用函数(例如,
myObject.doTheThing()
),则当您在该函数的作用域内时,
将是该对象。如果调用
this
时没有对象,则
this
将成为全局对象(
窗口

您的第二个示例之所以有效,是因为您正在传递
,以便可以将其引用为
el
。通过执行以下操作,可以达到相同的效果:

function setDecimal(input) {
    input.value = parseFloat(input.value).toFixed(2);
}

<input placeholder="$0.00" type="number"
    onchange="setDecimal(this)" name="amount_20_20_amt" id="amount_20_20_amt"
    value="" autocomplete="off" min="0" max="50000000" step="0.01">

无论何时调用函数,
都是根据调用函数的方式设置的。如果对对象调用函数(例如,
myObject.doTheThing()
),则当您在该函数的作用域内时,
将是该对象。如果调用
this
时没有对象,则
this
将成为全局对象(
窗口

您的第二个示例之所以有效,是因为您正在传递
,以便可以将其引用为
el
。通过执行以下操作,可以达到相同的效果:

function setDecimal(input) {
    input.value = parseFloat(input.value).toFixed(2);
}

<input placeholder="$0.00" type="number"
    onchange="setDecimal(this)" name="amount_20_20_amt" id="amount_20_20_amt"
    value="" autocomplete="off" min="0" max="50000000" step="0.01">

看看@RoydonD'Souza——这个答案涉及四舍五入,我绝对不希望这样,因为toFixed会完成这项工作。我更感兴趣的是,为什么我正在应用的代码似乎没有按预期运行(以及为什么内联代码能够工作)。请查看@RoydonD'Souza——这个答案涉及舍入,我肯定不希望舍入,因为toFixed可以完成这项工作。我更感兴趣的是,为什么我正在应用的代码似乎没有按预期运行(以及为什么内联代码能够工作)。好的建议,我喜欢这个BAM!工作完美。非常感谢。Rick你太快了,我使用了完全相同的变量名称
input
,但不幸的是我迟到了:)看看fiddle@dangowans,这是正确的,它只影响Firefox。相关:好建议,我喜欢这个BAM!工作完美。非常感谢。Rick你太快了,我使用了完全相同的变量名称
input
,但不幸的是我迟到了:)看看fiddle@dangowans,这是正确的,它只影响Firefox。相关的: