БлогNot. Создаём и заполняем вычисляемую таблицу в документе HTML

Создаём и заполняем вычисляемую таблицу в документе HTML

Требуется динамически создать в документе HTML-таблицу заданного размера, дать возможность пользователю ввести в её ячейки числовые значения, а затем как-то обработать их (в коде примера мы просто складываем все значения из таблицы и выводим сумму под формой). В общем, такой микро-Excel на HTML и Javascript :)

Для ввода применяются обычные элементы <input type="text">, которые создаются в каждой ячейке таблички и помечаются идентификаторами вида cij, где i и j - номера строки и столбца, считаемые с единицы. По кнопке "New" можно создать новую таблицу указанных в списках размеров, а по кнопке "Calc" - вычислить сумму чисел из ячеек. Там, где число прочитать не удалось, ставится ноль.

Ниже показан скрипт в работе и его код без HTML-обрамления, он проверен в Internet Explorer 11 и текущих версиях Google Chrome, Firefox и Opera.

N = M =

<div align="center" name="table" id="table"></div>
<div align="center">
 <form name="f1">
  N = <select name="N_select" id="N_select"></select>
  M = <select name="M_select" id="M_select"></select>
  <input type="button" value="New" onclick="create()">
  <input type="button" value="Calc" onclick="get()">
 </form>
 <p id="result"></p>
</div>

<script>
 function DynamicTable (N,M,tableId) { //Объект Динамическая таблица
  this.N = N; this.M = M;
  var tableDiv;

  this.table = function() { //Формирование таблицы в элементе tableId
   tableDiv = document.getElementById(tableId);
   var tbl = document.createElement('table');
   tbl.setAttribute('align', 'center');
   tbl.setAttribute('border', '1');
   var tbdy = document.createElement('tbody');
   for (var i = 1; i <= N; i++) {
    var tr = document.createElement('tr');
    for (var j = 1; j <= M; j++) {
     var td = document.createElement('td');
     var inp = document.createElement('input');
     inp.setAttribute('type', 'input');
     inp.setAttribute('size', '5'); //видимый размер
     inp.setAttribute('maxlength', '4'); //макс.длина ввода
     inp.setAttribute('id', 'c'+i+''+j); //inp.id = "";
     inp.setAttribute('name', 'c'+i+''+j);
     td.appendChild(inp);
     tr.appendChild(td);
    }
    tbdy.appendChild(tr);
   }
   tbl.appendChild(tbdy);
   tableDiv.appendChild (tbl);
  }

  this.erase = function () { //Удалить старую таблицу
   while (tableDiv.firstChild) { 
    tableDiv.removeChild (tableDiv.firstChild);
   }
  }

  this.calc = function() { //Вычисления
   var s = 0;
   for (var i = 1; i <= N; i++)
   for (var j = 1; j <= M; j++) {
    var n = parseFloat(document.getElementById("c"+i+""+j).value);
    if (isNaN(n)) document.getElementById("c"+i+""+j).value = '0';
    else s += n;
   }
   document.getElementById('result').innerHTML = s;
  }
 }

 var task; //Объект таблицы

 function get() { //Вычисления по заполненной таблице
  task.calc();
 }

 function create() { //По кнопке New создать новую таблицу нужного размера
  var n = parseInt (document.f1.N_select.value);
  if (isNaN(n)) {
   n = 3; document.f1.N_select.value = n;
  }
  var m = parseInt (document.f1.M_select.value);
  if (isNaN(m)) {
   m = 3; document.f1.M_select.value = m;
  }
  task.erase();
  task = new DynamicTable (n,m,'table');
  task.table();
 }

 function putLists (low,hi,def) { //Получить списки значений для размерностей таблицы
  var s = '';
  for (var i = low; i<= hi; i++) s += '<option value="'+i+'"'+
   (i==def?' selected':'')+'>'+i+"\n";
  document.getElementById('N_select').innerHTML = s;
  document.getElementById('M_select').innerHTML = s;
 }

 window.addEventListener('load', function (e) {
  //По загрузке страницы создать объекты по умолчанию
  putLists (2,9,3);
  task = new DynamicTable(3,3,'table');
  task.table();
 }, false); 
</script>
<noscript><div align="center">Включите Javascript для работы приложения!</div></noscript>

07.06.2019, 15:08 [5312 просмотров]


теги: учебное javascript html

показать комментарии (1)