Javascript 如何对字符串的最后x个字符执行数学运算并动态更新文本框?

Javascript 如何对字符串的最后x个字符执行数学运算并动态更新文本框?,javascript,jquery,Javascript,Jquery,我有一个应用程序,用户扫描或键入起始条形码,然后根据数量值自动计算结束条形码 当起始条形码完全是数字时,它可以正常工作,它进行计算并包含前导零,因此结束代码的长度是正确的 我的问题是,有一小部分条形码不完全是数字 条形码长度为14个字符。最后5个字符始终是数字,数量很少超过几百个,并且永远不会高到足以溢出到第6位 无论如何,我都不是javascript专家,仅仅获得我现在所拥有的技能就让我感到紧张——我希望这里的社区能够帮助我:) 以下是我正在使用的代码: $(document).ready(f

我有一个应用程序,用户扫描或键入起始条形码,然后根据数量值自动计算结束条形码

当起始条形码完全是数字时,它可以正常工作,它进行计算并包含前导零,因此结束代码的长度是正确的

我的问题是,有一小部分条形码不完全是数字

条形码长度为14个字符。最后5个字符始终是数字,数量很少超过几百个,并且永远不会高到足以溢出到第6位

无论如何,我都不是javascript专家,仅仅获得我现在所拥有的技能就让我感到紧张——我希望这里的社区能够帮助我:)

以下是我正在使用的代码:

$(document).ready(function() {
  //leading zero fill function for barcodes
  function pad(num, size) {
    var s = "00000000000000" + num;
    return s.substr(s.length - size);
  }
  //Function to do BC math: starting number + quantity -1 (since it's inclusive) = end. 
  function updateCode() {
    var quantity = $(this).closest('tr').find('.quantity').val();
    var barstart = $(this).closest('tr').find('.barstart').val();
    var end = pad(parseInt(barstart, 10) + parseInt(quantity - 1, 10), 14);
    $(this).parent().next().find('.barend').val(end);
  }
  $(document).on("change, keyup", ".barstart", updateCode);
});
编辑尝试再次插入HTML:

<script src="//code.jquery.com/jquery-1.7.2.min.js"></script>
<table id="formtable">
<tr>
<td><input class="quantity" size="6" id="qty_1" name="qtyid_1" value="123" type="text"></td>
<td><input class="barstart" size="15" maxlength="14" id="barstartid_1" name="barstart_1" value="" placeholder="Barcode Start" type="text"></td>
<td><input class="barend" size="15" maxlength="14" id="barendid_1" name="barend_1" value="" placeholder="Barcode End" type="text"></td>
</tr>
</table>

下面是一个JSFIDLE:

用户可以不用它生活,但如果我能让它工作,它会帮他们省去一些麻烦(并帮助我留下一个好印象——这是一个新的工作),因此我非常感谢社区能提供的任何帮助:)


谢谢

非常感谢@admcfajn-我不知道slice()函数的存在,这为我解决了这个问题。我必须将零填充移到后缀,并将其从结束值中移除,但由于它是拉前缀而不是做数学运算,所以这没有问题

以下是更新后的函数:

function updateCode() {
        var quantity = $(this).closest('tr').find('.quantity').val();
        var barstart = $(this).closest('tr').find('.barstart').val();
        var barprefix = barstart.slice(0,barstart.length-5);
      var barendsuffix = pad(parseInt(barstart.slice(-5),10)+parseInt(quantity-1,10),5);
        $(this).parent().next().find('.barend').val(barprefix+barendsuffix);
}

您对哪些输入数据有问题?条形码什么时候不是完全数字的?是保存条形码的变量吗?对不起,HTML没有在发布中通过,但它在JSFIDLE中。共有3个文本字段,其中应用了barstart、barend和quantity类。条形码通常类似于46180400117192,但有时可能类似于4FCS000016211-我想这取决于指定的最终收件人的前缀。@PeterMader当应用类似于4FCS000016211的条形码时,最终条形码将被计算为00000000000NaN,因为它试图对非数值进行数学运算。我正在寻找一种方法,使计算只查看最后5个字符,或者忽略非数值,同时将它们保留在结束条形码字段中的正确位置,因此数量为30的4FCS000016211将结束条形码值填充为4FCS000016240
parseInt('4FCS000016211'。切片(-5))