Ввод матрицы с клавиатуры

			var a0 = new Array();
			for (var i = 0; i < size.value; i++) {
				var row = table.insertRow(i);
				a0[i] = new Array();
				for (var j = 0; j < size.value; j++) {
					var input_matrix = document.createElement("input");
					input_matrix.type = "text";
					var cell = row.insertCell(j);
					cell.appendChild(input_matrix);
					a0[i][j] = input_matrix.value;
				}
			}

здравствуйте! пытаюсь сделать ввод матрицы с клавиатуры, но, когда вывожу этот массив в консоль, вижу только пустые строки в качестве элементов. подскажите, почему так? тем более input.value - это ж вроде всегда число, то есть строки никак не должно быть…
подскажите, пожалуйста, в чем проблема

PS. я конечно могу элементы ввести через один инпут и split объединит все в массив, но хочется разобраться и с таким вводом

Input.value всегда возвращает строку вне зависимости какое значение введено в инпут. Тебе нужно преобразовать строку в число с помощью parseFloat (для строк что описывают числа с плавающей точкой) или parseInt (для целых).

Судя по коду ты берёшь значения для матрицы прямо в момент создания инпутов. А в момент создания из значения - пустая строка. Наверное ты хочешь заполнить матрицу значениями после ввода пользователя, по нажатию кнопки.

да, я хочу заполнить матрицу по нажатию кнопки. что подскажете?

а по поводу того, что input.value всегда возвращает строку, могу немного поспорить. я пытался применять split к input.value (там находились числа через пробел), но мне результата это не давало. я долго думал, почему. наконец применил toString() и - вуаля - все заработало. это просто как факт. не буду ничего утверждать

никто не подскажет?

Покажи код который работает как ты описываешь.

Сратегий множество. Я бы сложил ссылки на инпуты в структуру похожую на матрицу, сохранил ее, а при клике пробегался бы по ней и из значений инпутов строил матрицу значений.

Плюс всякие детали: пустые и невалидные значения заменял бы на 0.

Вот реализация https://jsfiddle.net/4vksfch1/. Не ожидай что я продолжу давать готовые решения: обычно я помогаю разобраться с тем что у же есть.

function createMatrixInputs(node, width, height) {
  var matrixInputs = []
  for (var i = 0; i < height; i += 1) {
    var row = node.insertRow()
    var inputsRow = []
    matrixInputs.push(inputsRow)
    for (var j = 0; j < width; j += 1) {
      var cell = row.insertCell()
      var input = document.createElement('input')
      inputsRow.push(input)
      input.type = 'text'
      input.style.width = '2em'
      cell.appendChild(input)
    }
  }
  return matrixInputs
}

function getMatrixValues(matrixInputs) {
  var res = []
  for (var i = 0; i < matrixInputs.length; i += 1) {
    var inputsRow = matrixInputs[i]
    var valuesRow = []
    for (var j = 0; j < inputsRow.length; j += 1) {
      var input = inputsRow[j]
      var valueNum = parseFloat(input.value)
      if (isNaN(valueNum)) { // те строковые значения, которые не смог распарсить в число заменяю на 0
        valueNum = 0
      }
      valuesRow.push(valueNum)
    }
    res.push(valuesRow)
  }
  return res
}

// Само приложение
var submitButton = document.querySelector('button')
var matrixInputs = createMatrixInputs(document.querySelector('.matrix-inputs'), 10, 6)
submitButton.addEventListener('click', function() {
  var matrix = getMatrixValues(matrixInputs)
  console.log('matrix', matrix)
}, false)
1 лайк

хорошо, спасибо, я понял приблизительно твою идею. применю в своем решении

насчет кода.
var val = matrix.value;
var str = val.toString().split(" ");

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