Javascript val()返回逗号分隔的未定义值

Javascript val()返回逗号分隔的未定义值,javascript,jquery,Javascript,Jquery,我试图减去2列,得到第3列的值。我有下面的代码,只要输入框中没有逗号分隔的值,它就可以工作 const sum=$inputs=>$inputs.get().reduce((a,el)=>a+(parseInt(el.value,10)| | 0),0); 函数calcTableBox(){ const$table=$(“#TableBox”); const$row=$table.find('>div'); $row.each(函数(){ const$this=$(this); const l

我试图减去2列,得到第3列的值。我有下面的代码,只要输入框中没有逗号分隔的值,它就可以工作

const sum=$inputs=>$inputs.get().reduce((a,el)=>a+(parseInt(el.value,10)| | 0),0);
函数calcTableBox(){
const$table=$(“#TableBox”);
const$row=$table.find('>div');
$row.each(函数(){
const$this=$(this);
const limiter=parseInt($this.find('.limiter').val(),10);//以十进制为基数的parseInt
const used=parseInt($this.find('.used').val(),10);
剩余常数=限制器-已使用;
如果(!isNaN(剩余))$this.find('.remaining').val(剩余);
});
$table.find('.totalimiter').val(sum($table.find('.limiter'));
$table.find('.totalused').val(sum($table.find('.used'));
$table.find('.totalrem').val(sum($table.find('.remaining'));
}
jQuery($=>{//DOM就绪
$(.limiter,.used”)。打开(“输入”,calcTableBox);
calcTableBox();//初始化
});
函数add逗号(值){
var v=values.value&&parseFloat(values.value.replace(/,/g',);
values.value=v.tolocalesting(“美国”);
}
.TableBox{
显示:表格;
边界间距:6px;
}
.TableBox输入[类型=文本]{
最大宽度:80px;
}
.TableBox>div{
显示:表格行;
边框间距:5px
}
.TableBox>div>div{
显示:表格单元格;
保证金:4倍;
}
[只读]{
颜色:#aaa;
}

限制器
使用
剩下的
总周期:

总结评论

你有几个同时发生的问题,它们合谋破坏你的代码。您需要注意错误消息并理解代码为何会中断,但到目前为止,以下是显而易见的:

  • 您正在访问属性,就好像它们是函数一样(
    .length()
    )(您已经编辑了这个问题,但这是在原始帖子中)
  • 您正在将值重新分配给
    const
    变量,这是不允许的
  • 您正在对标题行进行迭代,该行返回了
    .val()
    undefined
    ,因为
    .find(.limiter”)
    没有返回任何元素,这导致
    limiter.replace
    抛出错误,因为
    undefined
    值没有
    replace
    函数
  • 这可能只是一个输入错误,但是您的
    jQuerythis
    变量没有定义。我相信您的意思是
    $this
    ,但您需要先修复它,然后代码才能正常工作
  • 对于我列表中的第三个错误,您应该能够通过一个简单的检查来解决它,以确保您确实有字符串值。如果没有,则可以跳过该行:

    $row.each(函数(){
    const$this=$(this),
    $limiter=$this.find('.limiter'),
    $used=$this.find(“.used”);
    //如果缺少限制器或使用过的元素,则不处理此行:
    if($limiter.length==0 | |$used.length==0)返回;
    //您可能需要添加其他检查以确保
    //$limiter.val()返回一个字符串,但我假设
    //HTML,只要
    //元素被发现。
    const limiterValue=$limiter.val()。替换(/,/g,”);
    limiterInt=parseInt(limiterValue);
    const usedValue=$used.val().replace(/,/g,“”);
    usedInt=parseInt(usedValue);
    //如果limiterInt或usedInt为NaN,则跳过此行。
    //这些数字无效。
    //或者你会想用另一种方式来处理这件事……那是真的
    //由你决定。
    if(isNan(limiterInt)| | isNan(usedInt))返回;
    剩余常数=限制器-使用量;
    $this.find('.remaining').val(remaining);
    });
    
    总结评论

    你有几个同时发生的问题,它们合谋破坏你的代码。您需要注意错误消息并理解代码为何会中断,但到目前为止,以下是显而易见的:

  • 您正在访问属性,就好像它们是函数一样(
    .length()
    )(您已经编辑了这个问题,但这是在原始帖子中)
  • 您正在将值重新分配给
    const
    变量,这是不允许的
  • 您正在对标题行进行迭代,该行返回了
    .val()
    undefined
    ,因为
    .find(.limiter”)
    没有返回任何元素,这导致
    limiter.replace
    抛出错误,因为
    undefined
    值没有
    replace
    函数
  • 这可能只是一个输入错误,但是您的
    jQuerythis
    变量没有定义。我相信您的意思是
    $this
    ,但您需要先修复它,然后代码才能正常工作
  • 对于我列表中的第三个错误,您应该能够通过一个简单的检查来解决它,以确保您确实有字符串值。如果没有,则可以跳过该行:

    $row.each(函数(){
    const$this=$(this),
    $limiter=$this.find('.limiter'),
    $used=$this.find(“.used”);
    //如果缺少限制器或使用过的元素,则不处理此行:
    if($limiter.length==0 | |$used.length==0)返回;
    //您可能需要添加其他检查以确保
    //$limiter.val()返回一个字符串,但我假设
    //HTML,只要
    //元素被发现。
    const limiterValue=$limiter.val()。替换(/,/g,”);
    limiterInt=parseInt(limiterValue);
    const usedValue=$used.val().replace(/,/g,“”);
    usedInt=parseInt(usedValue);
    //如果limiterInt或usedInt为NaN,则跳过此行。
    //这些数字无效。
    //或者你会想用另一种方式来处理这件事……那是真的
    //由你决定。
    如果(isNan(限制)| | isNan(使用))