Проход по массиву и возврат суммы всех значений - PullRequest
4 голосов
/ 07 сентября 2011

То, что я хочу сделать, это ввести числа, введенные пользователем, и сумму возвращенных чисел.Моя логика заключается в следующем:

  1. Пользовательская строка ввода
  2. Строка разбивается на массив
  3. Цикл по массиву и суммировать все числа
  4. Возвращаемая сумма

А вот код, который у меня есть на данный момент:

<script type='text/javascript'>

var val=document.getElementById('userInput').value;
var temp=val.split(" ");

function sum() {
    for(var i=0, MISSING THIS BIT

    document.getElementById('resultSum').innerHTML=MISSING THIS BIT;
}

</script>

<form name="input">
    <textarea name="userInput" rows=20 cols=20></textarea>
    <input name="Run" type=Button value="run" onClick="sum()">
<form name="resultSum"><input type=Text>

Я смиренно признаю, что это, скорее всего, неправильно, и ценю чье-то время и усилия.*

ОБНОВЛЕНИЕ: я сделал как предложено, и я получаю следующую ошибку в моем коде ниже:

Сообщение: 'document.getElementById (...)' является нулем или не является строкой объекта: 16 символов: 1 код: 0

<html>

<script type='text/javascript'>

function sum(){
    var val = document.getElementById('userInput').value;
    var temp = val.split(" ");

    var total = 0;
    var v;
    for(var i = 0; i < temp.length; i++) {
        v = parseFloat(temp[i]);
        if (!isNaN(v)) total += v;
    }

    document.getElementById('resultSum').innerHTML=total;

}

</script>

<form name="input">
    <textarea name="userInput" rows=20 cols=20></textarea>
    <input name="Run" type=Button value="run" onClick="sum()">
    <form name="resultSum"><input type=text>
<html>

Есть предложения?Спасибо всем за полноту - я прочитал оба примера и теперь понимаю процесс!

Ответы [ 4 ]

8 голосов
/ 07 сентября 2011

Вы хотите, чтобы базовый цикл преобразовывал и добавлял каждый элемент.

Я также очистил ваш HTML за тонну.У вас не было правильных закрывающих тегов.Я также изменил все атрибуты 'name' на атрибуты 'id', чтобы 'getElementById' работал правильно, что я пропустил при первом проходе.

<html>
  <head>
    <script type='text/javascript'>
      function sum(){ 
        var val = document.getElementById('userInput').value;
        var temp = val.split(" ");
        var total = 0;
        var v;
        for(var i = 0; i < temp.length; i++) {
          v = parseFloat(temp[i]);
          if (!isNaN(v)) total += v; 
        } 
        document.getElementById('resultSumValue').value = total; 
      } 
    </script>
  </head>
  <body>
    <form id="input">
      <textarea id="userInput" rows=20 cols=20></textarea> 
      <input id="Run" type=Button value="run" onClick="sum()" />
    </form>

    <form id="resultSum">
      <input id="resultSumValue" type="text" />
    </form>
  </body>
</html>

Это также будет игнорировать любые значения'NaN' (не число).

Если вы хотите, чтобы числа были только целыми числами (без десятичных дробей), измените parseFloat на parseInt.

2 голосов
/ 07 сентября 2011

Вот схема, но я думаю, что стоит написать ее самостоятельно, чтобы выучить.

0 голосов
/ 07 сентября 2011
<html>
<head>
<title>sum input</title>
<style>
p, textarea,input{font-size:24px}
textarea,input{text-align:right}
</style>
<script>
function sum(){
    var val= document.getElementById('userInput').value.replace(/^\D+|D+$/g,'');    
    document.getElementById('resultSum').value= eval(val.replace(/\D+/g,'+'));

}
</script>
</head>
<body>
<p>Enter a series of numbers :<br>
<textarea id="userInput" rows="10" cols="10"></textarea><br>
<input id="Run" type="button" value="Sum" onClick="sum()">
<input id="resultSum" type="text" readOnly>
</p>
</body>
</html>
0 голосов
/ 07 сентября 2011

Сначала начните с объявления переменной, установленной в 0, перед циклом for.Выполните итерацию по каждому элементу в массиве (array.length), добавляя к переменной, которую вы установили перед циклом for.

...