为parseInt对象添加值不起作用

问题描述 投票:0回答:1

这是我的javascript:

$('#vendorid').change(function(){
            var vendno = $(this).val();
            var data_String;
            var numpo = parseInt($('#numvendpo').val());
             data_String = 'vendorid='+vendno;
             $.post('ft-vendno.php',data_String,function(data){
                   var data = jQuery.parseJSON(data);
                    $('#vendponum').val($('#vendponum').val() + data  +'-'+ numpo+1);
                });
            });

我的输出是:enter image description here

如底部文本框中所示,最后一个数字“-31”应为“-4”(3 + 1)。而它目前正在将其添加为字符串。我似乎无法弄清楚问题。

顶部文本框是#numvendpo,底部是#vendponum原谅我的混乱变量名称。

javascript jquery
1个回答
0
投票

当你这样做时:

some_string + numpo + 1

由于第一个值是string,你是从右到左连接值,所以你首先将numpo(将其转换为string)连接到some_string,然后连接1,也作为string

你可以修复确保operations are done in the right order,所以一个选项可能是在numpo + 1周围添加括号:

$('#vendponum').val($('#vendponum').val() + data + '-' + (numpo + 1));

你也可以在之前做总结:

var numpo = parseInt($('#numvendpo').val()) + 1;

或者使用template strings

$('#vendponum').val(`${ $('#vendponum').val() }${ data }-${ numpo + 1 }`);

在这里你可以看到哪些有效,哪些无效:

const $vendorid = $('#vendorid');
const $numvendpo = $('#numvendpo');
const $outputParenthesis = $('#outputParenthesis');
const $outputBefore = $('#outputBefore');
const $outputTemplate = $('#outputTemplate');
const $outputWrong = $('#outputWrong');

$('#vendorid, #numvendpo').on('input', () => {
  const vendno = $vendorid.val();
  
  const numpo = parseInt($numvendpo.val());
  
  if (isNaN(numpo)) {
    return;
  }
  
  const numpoPlusOne = numpo + 1;

  $outputParenthesis.text(vendno + '-' + (numpo + 1));
  $outputBefore.text(vendno + '-' + numpoPlusOne);
  $outputTemplate.text(`${ vendno }-${ numpo + 1 }`);
  $outputWrong.text(vendno + '-' + numpo + 1);
});
body,
input {
  font-family: monospace;
  
}

input {
  border: 3px solid black;
  padding: 8px;
  width: 200px;
}

p {
  margin: 8px 0;
}

.label {
  display: inline-block;
  width: 222px;
  text-align: right;
  margin-right: 8px;
}

.wrong {
  color: red;
}
<input placeholder="Vendor ID" id="vendorid" type="text" />
<input placeholder="Num Vendor PO" id="numvendpo" type="text" />

<p><span class="label">WITH PARENTHESIS: </span><span id="outputParenthesis"></span></p>
<p><span class="label">SUM BEFORE: </span><span id="outputBefore"></span></p>
<p><span class="label">TEMPLATE LITERAL: </span><span id="outputTemplate"></span></p>
<p class="wrong"><span class="label">WRONG: </span><span id="outputWrong"></span></p>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.