Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.03.2013, 13:21
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 22.03.2013
Сообщений: 19

Помогите пожалуйста вычислить общую сумму
Помогите пожалуйста. Есть вот такой вот код:

<form>
<table>

<tr>
<td><input type="text" id="xxx_1" onkeyup="document.getElementById(\'xxx_1_r\').innerHTML = (parseFloat(this.value)||0) * 50"></td>
<td id="xxx_1_r"></td>
</tr>

<tr>
<td><input type="text" id="xxx_2" onkeyup="document.getElementById(\'xxx_2_r\').innerHTML = (parseFloat(this.value)||0) * 70"></td>
<td id="xxx_2_r"></td>
</tr>

<tr>
<td><input type="text" id="xxx_3" onkeyup="document.getElementById(\'xxx_3_r\').innerHTML = (parseFloat(this.value)||0) * 90"></td>
<td id="xxx_3_r"></td>
</tr>

</table>
</form>


Таблица умножает вводимое значение в input на заранее заданное число.

Как можно суммировать все получаемые и выводимые значения и сразу их выводить под таблице?

Помогите пожалуйста...
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2013, 13:33
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 22.03.2013
Сообщений: 19

пытался сделать как то так:

for (q = 1; q++) {   i=document.getElementById('xxx_r\').value; result=result+(i*chislo; }
document.write(result);


Но ни чего не вышло...
Необходимо сложить именно все xxx_1_r + xxx_2_r +xxx_3_r +...+ xxx_N_r

Последний раз редактировалось katalizator, 22.03.2013 в 13:37.
Ответить с цитированием
  #3 (permalink)  
Старый 22.03.2013, 14:03
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

1. Ваш пример не работает, и одна из причин - в HTML символы не маскируются обратным слэшом. Если вы внутри двойных кавычек используете одинарные, то маскировка вообще не нужна. Если же внутри двойных кавычек вдруг захотелось использовать опять же двойные, применяйте &quot; примерно так:
onkeyup="document.getElementById(&quot;xxx_1_r&quo t; ).innerHTML = (parseFloat(this.value)||0) * 50"
2. innerHTML в таблицах в младших IE только для чтения, писать нельзя.
3. document.write используется только в процессе закрузки документа. Когда документ уже полностью загружен, document.write приведет к переписыванию документа, т.е. старое содержимое будет заменено на новое
Ответить с цитированием
  #4 (permalink)  
Старый 22.03.2013, 14:09
Аспирант
Отправить личное сообщение для Ervin Посмотреть профиль Найти все сообщения от Ervin
 
Регистрация: 19.03.2013
Сообщений: 84

1) Надо убрать экранизацию с document.getElementById. Должно быть так,
- document.getElementById('xxx_N_r')
2) Вот простая функция, вызов которой делает то что тебе нужно.
function getResult() {
  var i = 1,
      el = document.getElementById("xxx_" + i + "_r"),
      result = 0;
  while(el) {
    result += +el.innerHTML;
    i++;
    el = document.getElementById("xxx_" + i + "_r");
  }
  
  alert(result);
}


Для того чтобы она вызывалась автоматический, нужно приписать ее к каждому событию onkeyup. Пример -
onkeyup="document.getElemenyById('xxx_1_r').innerHTML = (parseFloat(this.value)||0) * 50;getResult();"


Вроде то что нужно, можно сделать более эффективно, если изменить пару моментов.
Ответить с цитированием
  #5 (permalink)  
Старый 22.03.2013, 14:11
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 22.03.2013
Сообщений: 19

Сообщение от rgl Посмотреть сообщение
1. Ваш пример не работает, и одна из причин - в HTML символы не маскируются обратным слэшом. Если вы внутри двойных кавычек используете одинарные, то маскировка вообще не нужна. Если же внутри двойных кавычек вдруг захотелось использовать опять же двойные, применяйте &quot; примерно так:
onkeyup="document.getElementById(&quot;xxx_1_r&quo t; ).innerHTML = (parseFloat(this.value)||0) * 50"
Прошу прощения, кавычки остались после того как я очистил код от php в коде - экранированировал кавычки JSа. Просто у меня значения xxx берутся из базы и задаются прямо в код.

Сообщение от rgl Посмотреть сообщение
2. innerHTML в таблицах в младших IE только для чтения, писать нельзя.
3. document.write используется только в процессе закрузки документа. Когда документ уже полностью загружен, document.write приведет к переписыванию документа, т.е. старое содержимое будет заменено на новое
Или можеn подскажите пожалуйста как сложить значения в дивах:

<div id="num">10</div>
<div id="num">20</div>
<div id="num">30</div>
<div id="num">40</div>
<div id="num">50</div>
<div id="num">60</div>


Если получиться сделать это то задача думаю будет решена.
Буду очень Вам благодарен
Ответить с цитированием
  #6 (permalink)  
Старый 22.03.2013, 14:15
Аспирант
Отправить личное сообщение для Ervin Посмотреть профиль Найти все сообщения от Ervin
 
Регистрация: 19.03.2013
Сообщений: 84

Тоже самое с дивами, просто задать им id с их порядковым номером а потом заменить xxx в функции getResult на num. Пример -

<div id="num_1"></div>
<div id="num_2"></div>

// в функции getResult изменить id
el = document.getElementById("num_" + i);
Ответить с цитированием
  #7 (permalink)  
Старый 22.03.2013, 14:16
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от Ervin Посмотреть сообщение
можно сделать более эффективно, если изменить пару моментов.
var i = 1, el = document.getElementById("xxx_" + i + "_r"),
var i = 1, el = document.getElementById("xxx_1_r"),
Ответить с цитированием
  #8 (permalink)  
Старый 22.03.2013, 14:40
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 22.03.2013
Сообщений: 19

Огромное спасибо за помощь!
Прошу прощения что туплю

Пытаюсь воспользоваться вашими советами но ни как...
Я JS второй раз в жизни сталкиваюсь.

Покажите пожалуйста полный готовый скрипт что бы вычислить сумму значений

<div id="num_1_1">10</div>
<div id="num_1_2">20</div>
<div id="num_2_1">50</div>
<div id="num_2_2">30</div>
<div id="num_2_3">25</div>
<div id="num_3_1">64</div>

Что бы в блоке

<div id="result"></div>

Высвечивалась сумма значений всех блоков.

Сегодня до 4х утра возился так и не разобрался
Ответить с цитированием
  #9 (permalink)  
Старый 22.03.2013, 15:15
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

<html>
<script type="text/javascript">
  function f() {
    var el, i = 0, result = 0;
    while( el = document.getElementById( "num_" + ++i ) )
      result += +el.textContent;
    document.getElementById( "result" ).innerHTML = "sum=" + result;
  }
</script>

<div id="num_1">10</div>
<div id="num_2">20</div>
<div id="num_3">50</div>
<div id="num_4">30</div>
<div id="num_5">25</div>
<div id="num_6">64</div>
<input type="button" value="calculate" onclick="f();">
<div id="result"></div>
</html>

Последний раз редактировалось rgl, 22.03.2013 в 15:18.
Ответить с цитированием
  #10 (permalink)  
Старый 22.03.2013, 15:24
Аспирант
Отправить личное сообщение для Ervin Посмотреть профиль Найти все сообщения от Ervin
 
Регистрация: 19.03.2013
Сообщений: 84

function getResult() {
   var i = 1,
        b = 1,
        el = document.getElementById("num_" + i + "_" + b),
        result = 0;
        
    while(el) {
       while(el) {
          result += +el.innerHTML;
          b++;
          el = document.getElementById("num_" + i + "_" + b);
      }
          
      b = 1;
      i++;
      el = document.getElementById("num_" + i + "_" + b);
    }
			  
   document.getElementById("result").innerHTML = result;
}


Ред. - Код чтобы вызвать функцию
<div id="calculate"></div>

    window.onload = function() {
       document.getElementById("calculate").onclick = getResult;
    }

Последний раз редактировалось Ervin, 22.03.2013 в 15:28. Причина: Доп.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста помогите решить задачу на java alex01rus1991 Элементы интерфейса 9 27.11.2012 01:02
Помогите пожалуйста правильно написать скрипт raffx Events/DOM/Window 17 16.10.2012 20:31
Помогите пожалуйста Как к картинке приделать ссылку в js volk_bio Элементы интерфейса 9 11.07.2012 14:16
Помогите пожалуйста Flexo666 Элементы интерфейса 0 01.11.2011 20:43
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 10:44