У меня есть некоторый код, который рассчитывает количество кадров на основе ввода некоторых пользователей. Я могу заставить это работать, когда я вручную вводю данные в функцию, но я хотел бы, чтобы это вычислялось автоматически через «onkeyup» в поле ввода, поэтому я немного изменил код, чтобы сделать это, но это не так Работа. Это исключение

Uncaught TypeError: Cannot read property 'split' of undefined at processChunk (0eaace3b-4b4c-4c76-93c5-8e8921ae247c:309) at HTMLInputElement.onkeyup (0eaace3b-4b4c-4c76-93c5-8e8921ae247c:213) 

Сценарий, в котором есть проблема.

  var input = document.getElementById("id_desiredFrames").value; var totFrames = 0; var chunk = input.split(";") chunk.forEach(processChunk); document.getElementById("TotalFrames").value = totFrames function processChunk(chunk) { var stepInfo = chunk.split(","); var step = 1; if(stepInfo.length {amp}gt; 1) step = stepInfo[1]; var range = stepInfo[0].split("-"); var frame = Math.round((range[1]- range[0]  1) / step); totFrames  = frame; } 

Скрипт, который работает, но с ручным вводом данных:

 var input = "1-4; 10-20,2" var totFrames = 0; var chunk = input.split(";") chunk.forEach(processChunk); console.log(totFrames); function processChunk(chunk) { var stepInfo = chunk.split(","); var step = 1; if(stepInfo.length {amp}gt; 1) step = stepInfo[1]; var range = stepInfo[0].split("-"); var frame = Math.round((range[1]- range[0]  1) / step); totFrames  = frame; } 

id_desiredFrames — это поле ввода в моей форме. TotalFrames — это скрытое поле, в которое я хотел бы передать значение, чтобы я мог получить значение, когда пользователь POST

Я бы предложил вызвать событие onchange / onkeyup, чтобы получить значение поля ввода

HTML,

 {amp}lt;input onkeyup="check()" id="id_desiredFrames"{amp}gt; {amp}lt;/input{amp}gt; 

JS,

 var totFrames = 0; function check() { var input = document.getElementById("id_desiredFrames").value; var chunk = input.split(";") chunk.forEach(processChunk); document.getElementById("TotalFrames").value = totFrames } function processChunk(chunk) { var stepInfo = chunk.split(","); var step = 1; if(stepInfo.length {amp}gt; 1) step = stepInfo[1]; var range = stepInfo[0].split("-"); var frame = Math.round((range[1]- range[0]  1) / step); totFrames  = frame; } 

надеюсь, это то, что вы ищете.

Это о stepInfo[0] или stepInfo[0] , не так ли? Я бы предложил добавить несколько условий перед выполнением функции — таким образом она будет игнорировать хотя бы неправильный ввод:

 function processChunk(chunk) { if (!chunk || chunk.indexOf(',') == -1) return; var stepInfo = chunk.split(","); var step = 1; if(stepInfo.length {amp}gt; 1) step = stepInfo[1]; if (!stepInfo[0] || stepInfo[0].indexOf('-') == -1) return; var range = stepInfo[0].split("-"); var frame = Math.round((range[1]- range[0]  1) / step); totFrames  = frame; }