0

如何从事件处理程序中的 for 循环中获取一些东西?

这个json数组

var elements = [ { "id": "#id1", "name": "text1" }, { "id": "#id2", "name": "text2" } ];

被传递给那个函数

function setHandlers(elements)  {
    for (var i = 0; i < elements.length; i++)  {
        $(document).on("focusout", elements[i].id, function() {

            alert(elements[i].id);     // doesn't work because 'element' isn't
                                       // defined.
        });                         
    }
}

如何访问元素而不在函数之外定义它?
编辑:类型应该是元素

4

2 回答 2

0

您的代码应如下所示:

function setHandlers(elements)  {
    for (var i = 0; i < elements.length; i++)  {
        (function(i){
            $(document).on("focusout", elements[i].id, function() {
                alert(elements[i].id);
            });   
        })(i);                 
    }
}

您需要一个匿名函数来保持每个循环中的i值。即把它放在单独的上下文中解决了这个问题。

于 2013-09-08T16:17:39.067 回答
0

问题是由于闭包变量i。您可以使用本地闭包来使用它

function setHandlers(elements)  {
    $.each(types, function(idx, obj){
        $(document).on("focusout", obj.id, function() {
            alert(obj.id);     // doesn't work because 'element' isn't
            // defined.
        });                         
    })
}

注意:您正在迭代types,这是一个错误吗?

于 2013-09-08T16:00:55.583 回答