100 %

by dkunin

HTML

<html>
<head>
 
<script lang="javascript"> 
var numbers = [
  [ 'Значение 1', 25 ],
  [ 'Значение 2', 25 ],
  [ 'Значение 3', 25 ],
  [ 'Значение 4', 25 ]
];
var table = document.createElement('table');
function initForm() {
  var table = document.createElement('table');
  for ( var i = 0; i < numbers.length; ++i ) {
    var row = document.createElement('tr'); 
    row.innerHTML = createRowHTML(i, numbers[i]);
    table.appendChild(row);
  }
  document.getElementById('numbers_form').appendChild(table);
}
    
function initForm1() {
 
 var i = (numbers.length);
 numbers[i]=[ 'Значение ' + (i + 1), 1 ]
    var row = document.createElement('tr');
    row.innerHTML = createRowHTML(i, numbers[i]);
    table.appendChild(row);  
  document.getElementById('numbers_form').appendChild(table);
 
}
function onChange(field) {
  var skipId = field.id;
  var value = field.value;
 
  if ( value < 0 || value > 100 ) {
    alert("Введите значение от 0 до 100");
    return;
  }
 
  var method = getMethod();
 
  if ( method == 'change-all' ) {
    doChangeAll(field.id);
  } else if ( method == 'change-next' ) {
    doChangeNext(field.id);
  }
 
}
 
function doChangeAll(skipId) {
  var requiredSumOfOtherFields = 100 - document.getElementById(skipId).value;
  var actualSumOfOtherFields = calculateSumSkipId(skipId);
  var multiplier = requiredSumOfOtherFields / actualSumOfOtherFields;
  for ( var i = 0; i < numbers.length; ++i) {    
    var id = i;
    if ( id != skipId ) {
      document.getElementById(id).value = document.getElementById(id).value * multiplier;
    }
  }
}
 
function doChangeNext(afterId) {
  var requiredSumOfNextFields = 100 - calculateSumBeforeId(afterId);
  if ( requiredSumOfNextFields < 0 ) {
    alert("Невозможно привести сумму к 100");
    return;
  }
 
  var actualSumOfNextFields = calculateSumAfterId(afterId);
  var multiplier = requiredSumOfNextFields / actualSumOfNextFields;
 
  for ( var i = 0; i < numbers.length; ++i) {
    var id = i;
    if ( id >...