首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为循环索引返回“[对象对象]-未定义”的Javascript

为循环索引返回“[对象对象]-未定义”的Javascript
EN

Stack Overflow用户
提问于 2013-12-31 03:31:12
回答 4查看 189关注 0票数 0

我试图对多个元素运行一个函数,所以我使用了for循环。我不明白为什么我没有得到任何价值。

代码语言:javascript
运行
复制
    var i;
var aFields = ["#business1A","#business1B","#business1C","#business1D","#business2A","#business2B","#business2C","#business2D",
                "#business3A","#business3B","#business3C","#business3D","#business4A","#business4B","#business4C","#business4D",
                "#business5A","#business5B","#business5C","#business5D","#business6A","#business6B","#business6C","#business6D"];
for (i = 0; i < aFields.length; i++) {
    $(aFields[i]).keyup(function(){
        alert($(aFields[i]+'Warning') + " - " +$(aFields[i]).val());
    });
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-31 03:38:52

试试这个:

代码语言:javascript
运行
复制
var i;
var aFields = ["#business1A","#business1B","#business1C","#business1D","#business2A","#business2B","#business2C","#business2D",
                "#business3A","#business3B","#business3C","#business3D","#business4A","#business4B","#business4C","#business4D",
                "#business5A","#business5B","#business5C","#business5D","#business6A","#business6B","#business6C","#business6D"];
for (i = 0; i < aFields.length; i++) {
  (function(j){
    $(aFields[j]).keyup(function(){
        alert(($(this).attr('id')+'Warning') + " - " +$(this).val());
    });
  })(i);
}
票数 1
EN

Stack Overflow用户

发布于 2013-12-31 03:35:45

这是因为在事件处理程序的回调函数中使用变量i。该事件发生在循环结束时,因此变量包含一个索引,该索引超出了数组中的最后一个项。

要使用绑定事件的迭代中的变量的值,可以通过创建作用域为每个迭代创建一个变量,使用立即执行的函数表达式:

代码语言:javascript
运行
复制
var i;
var aFields = ["#business1A","#business1B","#business1C","#business1D","#business2A","#business2B","#business2C","#business2D",
                "#business3A","#business3B","#business3C","#business3D","#business4A","#business4B","#business4C","#business4D",
                "#business5A","#business5B","#business5C","#business5D","#business6A","#business6B","#business6C","#business6D"];
for (i = 0; i < aFields.length; i++) {
  (function(j){
    $(aFields[j]).keyup(function(){
        alert($(aFields[j]+'Warning') + " - " +$(aFields[j]).val());
    });
  })(i);
}
票数 1
EN

Stack Overflow用户

发布于 2013-12-31 03:33:42

这里的问题是闭包变量的错误使用 i,变量在所有密钥处理程序之间共享,所以当循环结束时,i将有值aFields.length,因此aFields[i]将返回未定义的值。

试一试

代码语言:javascript
运行
复制
var aFields = ["#business1A", "#business1B", "#business1C", "#business1D", "#business2A", "#business2B", "#business2C", "#business2D",
    "#business3A", "#business3B", "#business3C", "#business3D", "#business4A", "#business4B", "#business4C", "#business4D",
    "#business5A", "#business5B", "#business5C", "#business5D", "#business6A", "#business6B", "#business6C", "#business6D"];

$.each(aFields, function (i, val) {
    $(val).keyup(function () {
        alert($(val + 'Warning') + " - " + $(val).val());
    });
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20851291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档