Javascript 当我向索引中添加新的数组元素时,以前的数组元素是未定义的

Javascript 当我向索引中添加新的数组元素时,以前的数组元素是未定义的,javascript,Javascript,这是我昨天早些时候问过的一个扩展,我最初认为是jQuery的.bind或.keyup事件导致了它,但它比这更神秘 我创建了一个更详细的解释,抱歉的质量 var stopTimeArray = [] $('.mdl-textfield__input.stage-time.stop_time').bind('input', function() { console.log('stopTimeArray', stopTimeArray) var stopTimeVal = parseI

这是我昨天早些时候问过的一个扩展,我最初认为是jQuery的
.bind
.keyup
事件导致了它,但它比这更神秘

我创建了一个更详细的解释,抱歉的质量

var stopTimeArray = []
$('.mdl-textfield__input.stage-time.stop_time').bind('input', function() {
    console.log('stopTimeArray', stopTimeArray)
    var stopTimeVal = parseInt(this.value)
    console.log('stopTimeVal', stopTimeVal) //always prints [] on new form
    var index = parseInt($(currentStage()).attr('rel')) - 1
    console.log('index', index)
    stopTimeArray[index] = stopTimeVal
    updateTTH();
    debugger;
  });

  function updateTTH() {
    console.log(stopTimeArray)
    // other code...
  }
基本上我有一个表格,你可以复制。我只想在编辑某个特定输入时获取其值,将其推送到一个数组中,这样我就可以得到总数。例如,假设在第一个表单中,我输入
20
,它将打印

停止时间数组► []

stopTimeVal 2

索引0

► [2]

停止时间数组► [2]

stopTimeVal 20

索引0

► [20]

这太完美了,这正是我想要的。但是,当我想向第二个表单添加内容时,就会出现问题。假设我们想在新表单中添加
8
。这就是结果

停止时间数组► []

我不知道为什么,但很明显stopTimeArray正在被覆盖和重置

stopTimeVal 8

指标1

► (2) [未定义×1,8]

这是一个我非常迷茫的问题,因为我实际上认为机器是错的(jk)。但如果你们知道这件事,请告诉我:)

编辑: currentStage()工作正常,但在这里,如果你们想看的话

var currentStage = function findCurrentStageContainer() {
     var numStages = document.getElementsByClassName('stage-container').length;
     for (var i = 0; i <  numStages; i++) {
       if (!hasClass(document.getElementsByClassName('stage-container')[i], "hidden-form")) {
         return document.getElementsByClassName('stage-container')[i]
       }
     }
   }
var currentStage=函数findCurrentStageContainer(){
var numStages=document.getElementsByClassName('stage-container')。长度;
对于(变量i=0;i
您是否尝试通过单击► 左边的按钮?展开的值是真实值,
[undefined x 1,8]
只是控制台日志发生时数组的预览。如何使用
currentStage()?代码在哪里?@ibrahimmahrir,是的,没有定义。currentStage()工作得非常好。可以有多少个阶段?为什么不在每次更改输入时填充整个数组?而且
currentStage
可以优化很多(看在上帝的份上,你调用了
getElementsByClassName
三次)。因为如果我按一下,那么每次我输入一个2位数的数字,它都会输入2个值。