Member 12724138 Ответов: 2

Удалите начальный ноль при сложении двух текстовых полей


Я новичок в js... так что, пожалуйста, помогите мне.. У меня есть три текстовых поля, значения, заданные в первом и втором текстовых полях, будут суммированы и показаны автоматически, в третьем текстовом поле. Мои текстовые поля не принимают десятичные значения, то есть принимают только целые числа. проблема в том, что если у меня есть ведущие нули в первых двух текстовых полях, это приводит к странным результатам в третьем текстовом поле. Пожалуйста, помогите мне.

function getValues(val)
   {
   var carryVol=parseInt(document.getElementById('<%=txtCarryOver.ClientID%>').value)||0;
   var FreshVol=parseInt(document.getElementById('<%=txtFreshVol.ClientID%>').value)||0;
   var target=carryVol+FreshVol;
   document.getElementById('<%=txtTotalVol.ClientID%>').value=target;
      }

 <asp:TextBox ID="txtCarryOver" runat="server" Enabled="true" TabIndex="3" Width="150px"

                                        onkeyup="getValues(1)" onKeyDown="return validateQty(event)" MaxLength="3"                                             Height="13px"></asp:TextBox>

<asp:TextBox ID="txtFreshVol" runat="server" Enabled="true" TabIndex="3" Width="150px"

                                        onkeyup="getValues(2)" onKeyDown="return validateQty(event)" MaxLength="3" Height="13px"></asp:TextBox>
<asp:TextBox ID="txtTotalVol" runat="server" Enabled="true" TabIndex="3" Width="150px"

                                        onKeyDown="preventBackspace();" Height="13px"></asp:TextBox>


Что я уже пробовал:

пожалуйста, помогите мне изменить вышеприведенный код в соответствии с моими потребностями.

Кроме того, я уже использовал onkeydown и onkeyup, помогите мне вызвать функцию js тоже, я всегда совсем запутался, как вызвать функцию js...Его настоятельная просьба о помощи. заранее благодарю вас. Я попробовал приведенный выше код

2 Ответов

Рейтинг:
4

Vincent Maverick Durano

Вы можете использовать регулярное выражение для замены ведущих нулей, как это:

yourTextValue = yourTextValue.replace(/^0+/, '');


Или вы могли бы попробовать вместо него что-то вроде этого :
<script>
function calculate(){
  var box1 = document.getElementById('<%=txtCarryOver.ClientID%>');
  var box2 = document.getElementById('<%=txtFreshVol.ClientID%>');
  var box3 = document.getElementById('<%=txtTotalVol.ClientID%>');
  
  validateNumber(box1);
  validateNumber(box2);
  
  var t1 = parseInt(box1.value) ||0;
  var t2 = parseInt(box2.value) ||0;

  var sum = t1 + t2;
  box3.value = sum;
}

function validateNumber(o) {
   if (o.value.length > 0) {
        o.value = o.value.replace(/[^\d]+/g, ''); //Allow only whole numbers
   }
}

</script>


Затем вызовите описанный выше метод в первом и втором текстовых полях следующим образом:
<asp:textbox id="txtCarryOver" runat="server" onkeyup="calculate()"></asp:textbox>
<asp:textbox id="txtFreshVol" runat="server" onkeyup="calculate()"></asp:textbox>
<asp:textbox id="txtTotalVol" runat="server" ></asp:textbox>


Смотрите демо-версию здесь: Edit fiddle - JSFiddle[^]


Richard Deeming

Это намного проще, чтобы просто скоротать системы счисления в parseInt функция, которая предотвращает обработку значений с ведущими нулями как восьмеричных. :)

Vincent Maverick Durano

ваааа! никогда не думал о перегрузке парама. Ты прав :)

Member 12724138

спасибо, это тоже сработало

Рейтинг:
16

Richard Deeming

Вы не получаете "странных" значений; вы просто рассматриваете существующие значения как восьмеричные, потому что вы не указали радикс для parseInt метод.


Если входная строка начинается с "0", то радикс равен восьми (восьмеричному) или 10 (десятичному). Именно то, какой радикс выбран, зависит от реализации. ECMAScript 5 указывает, что используется 10 (десятичная дробь), но пока не все браузеры поддерживают это. По этой причине всегда указывайте радикс при использовании parseInt.

Измените свой код, чтобы пройти 10 как радикс, и он будет работать так, как ожидалось:
function getValues(val) {
   var carryVol = parseInt(document.getElementById('<%=txtCarryOver.ClientID%>').value, 10) || 0;
   var FreshVol = parseInt(document.getElementById('<%=txtFreshVol.ClientID%>').value, 10) || 0;
   var target = carryVol + FreshVol;
   document.getElementById('<%=txtTotalVol.ClientID%>').value = target;
}


Vincent Maverick Durano

5ed для более простого способа сделать это.

Member 12724138

спасибо за помощь