Javascript 元素[i].onkeyup=function()仅对第一类元素激发

Javascript 元素[i].onkeyup=function()仅对第一类元素激发,javascript,Javascript,长话短说,这是我在24小时内第三次在Stackoverflow上发帖。尽管如此,我离我的答案越来越近了,但我被一件小事难住了 基本上,我使用的是Cocoon,它可以帮助创建嵌套表单,因此当用户想要创建另一个项目时,她必须提交两个表单,因此,同一类中会有多个项目 这是我的密码 var stopTimeElement = document.getElementsByClassName('mdl-textfield__input stage-time stop_time'); for (var i=

长话短说,这是我在24小时内第三次在Stackoverflow上发帖。尽管如此,我离我的答案越来越近了,但我被一件小事难住了

基本上,我使用的是Cocoon,它可以帮助创建嵌套表单,因此当用户想要创建另一个项目时,她必须提交两个表单,因此,同一类中会有多个项目

这是我的密码

var stopTimeElement = document.getElementsByClassName('mdl-textfield__input stage-time stop_time');

for (var i=0; i<stopTimeElement.length; i++){
  stopTimeElement[i].onkeyup = function() { 
    debugger;
    var stopTimeVal = parseInt(this.value)
    var index = parseInt($(currentStage()).attr('rel')) - 1
    stopTimeArray[index] = stopTimeVal
    wtf = stopTimeArray;
    console.log('----wtf----: ',wtf)
    componentHandler.upgradeDom();
    updateTTH();
    //reRun();
  }
}

我知道混合使用JavaScript和jQuery有点混乱,但请告诉我您的想法

这是js中的标准scopes可见性问题。你应该把你的内在功能包装到生活中

.box{
宽度:100px;
高度:100px;
边框:1px纯黑;
背景色:暗灰色;
}
.box:悬停{
背景颜色:浅灰色;
}


我真的认为这会管用,但事情是一样的。对于第二种形式,我什么也没做:(@dsomel21,好吧。我看不见您正在将事件处理程序直接分配给onkeyup属性。我使用
addEventListener()更改了答案)
method use@dsomel21,我添加了额外的示例,所以您可以在我的答案中查看。这非常有用,我有点好奇为什么您没有包装在一个自调用函数()中尽管如此。这是因为您没有可引用的索引吗?@dsomel21,因为我这里没有任何作用域数据。如果您更喜欢使用索引,并且将在事件处理程序操作中使用它们,如果我没有弄错的话,您仍然需要将其包装到iife中。至少,额外的iife级别不会让情况变得更糟。
function reRun() {
  // code here
}

reRun()
for (var i=0; i<stopTimeElement.length; i++){
  (function (i) {
    stopTimeElement[i].addEventListener("keyup", function() { 
        debugger;
        var stopTimeVal = parseInt(this.value)
        var index = parseInt($(currentStage()).attr('rel')) - 1
        stopTimeArray[index] = stopTimeVal
        wtf = stopTimeArray;
        console.log('----wtf----: ',wtf)
        componentHandler.upgradeDom();
        updateTTH();
        //reRun();
    });
  })(i);
}