javascript输入掩码货币

javascript输入掩码货币,javascript,html,Javascript,Html,我在input.value和input.length上遇到此错误: scripts.js:151未捕获类型错误:无法读取的属性“length” 未定义 我试图将货币掩码应用于输入,但出现错误 函数格式编号(n){ //格式编号1000000至1234567 返回n.replace(/\D/g,“”)。replace(/\B(?=(\D{3})+(?!\D))/g,“”) } 函数格式货币(输入,模糊){ //将$附加到值,验证小数端 //并将光标放回正确的位置。 //获取输入值 var inp

我在input.value和input.length上遇到此错误:

scripts.js:151未捕获类型错误:无法读取的属性“length” 未定义

我试图将货币掩码应用于输入,但出现错误

函数格式编号(n){
//格式编号1000000至1234567
返回n.replace(/\D/g,“”)。replace(/\B(?=(\D{3})+(?!\D))/g,“”)
}
函数格式货币(输入,模糊){
//将$附加到值,验证小数端
//并将光标放回正确的位置。
//获取输入值
var input_val=input.value;
console.log(输入)
//不验证空输入
if(input_val==“”){return;}
//原始长度
var original_len=输入值长度;
//初始插入符号位置
var caret_pos=input.getAttribute(“selectionStart”);
//检查小数点
如果(输入值索引(“.”>=0){
//获取第一个小数点的位置
//这可以防止多个小数被删除
//进入
var decimal_pos=输入值索引(“.”);
//按小数点拆分数字
变量左侧=输入值子字符串(0,十进制位置);
变量右侧=输入值子字符串(十进制位置);
//在数字的左侧添加逗号
左侧=格式编号(左侧);
//验证右侧
右侧=格式编号(右侧);
//在模糊上,确保小数点后有2个数字
如果(模糊==“模糊”){
右侧+=“00”;
}
//将小数限制为仅2位
右侧=右侧。子字符串(0,2);
//通过连接数字。
输入_val=“$”+左侧+”+右侧;
}否则{
//没有输入小数
//在数字后面加逗号
//删除所有非数字
输入值=格式编号(输入值);
input_val=“$”+input_val;
//最终格式
如果(模糊==“模糊”){
输入值_val+=“.00”;
}
}
//将更新的字符串发送到输入
输入值(输入值);
//将插入符号放回正确的位置
var updated_len=输入值长度;
插入符号位置=更新的插入符号长度-原始插入符号长度+插入符号位置;
输入[0]。设置选择范围(插入符号位置,插入符号位置);
}
(函数初始化(){
//生命法
让输入=document.querySelector(“输入[数据类型='currency']”)
input.addEventListener(“keyup”,()=>{
货币(本);
})
input.addEventListener(“keyup”,()=>{
格式货币(本“模糊”);
})
})();
.textfield\u标签{
字体系列:“罂粟花”;
颜色:#A3A3;
边缘底部:10px;
文本转换:大写;
字母间距:1.5px;
}
.material文本字段{
字体系列:“罂粟花”;
位置:相对位置;
边缘底部:30px;
颜色:#A3A3;
}
.物料文本字段标签{
字体系列:“罂粟花”;
位置:绝对位置;
字号:1.2rem;
左:0;
最高:50%;
转化:translateY(-50%);
背景:#fff;
边界半径:5px;
颜色:灰色;
填充:0.3雷姆;
保证金:0.5雷姆;
过渡:0.1s缓解;
变换原点:左上;
指针事件:无;
}
.物料文本字段输入{
字体系列:“罂粟花”;
宽度:100%;
字号:1rem;
大纲:无;
边框:1px实心#ffb24f;
边界半径:5px;
背景:#00416a;
填充:1雷姆0.7雷姆;
颜色:#ffb24f;
过渡:0.1s缓解;
}
.material textfield::before{
背景:无;
边框:1px实心#ffb24f;
内容:“;
显示:块;
位置:绝对位置;
顶部:2个;
左:2px;
右:2px;
底部:2px;
指针事件:无;
}
.material文本字段输入:焦点{
边框颜色:#ebb76e;
}
.material文本字段输入:焦点+标签{
颜色:#ebb76e;
排名:0;
转换:translateY(-50%)量表(0.9);
背景:线性梯度(
180度,
rgba(235,235,235,1)0%,
rgba(235,235,235,1)50%,
rgba(255,255,255,1)50%,
rgba(255、255、255、1)100%
);
}
.material文本字段输入::占位符{
颜色:#ebb76e;
}

价值

此错误是由于内部的This关键字使用不当造成的:

  let input = document.querySelector("input[data-type='currency']")
  input.addEventListener("keyup", () => {
    formatCurrency(this);
  })
在这里,您试图将输入对象作为参数传递给formatCurrency函数,但是这个没有引用它。要获取引用,您需要为回调函数使用特殊的e参数,并使用e.target访问它,该参数包含对导致事件的对象的引用

e、 g

此外,稍后在脚本中,您将尝试通过以下方式将值分配回输入对象:

input.value(input_val);
通过上述操作,您实际上正在尝试调用一个名为value()的函数-要更改对象的.value属性,您需要如下操作:

input.value=input_val;

使用内置货币模式的简单演示

currencyfield.addEventListener(“输入”,格式,false)
函数格式(){
设val=+currencyfield.value;
document.querySelector(“.textfield_label”).textContent=val.tolocalString('fullwide',{maximumFractionDigits:2,style:'currency',currency:'USD',useGrouping:true})
}

$0.00

你知道有内置的JS处理方法吗?但是我需要更改输入值,你能帮我吗?你必须回到基本的方面。
input.value=input_val;