如何在事件处理程序中获取变量?

时间:2013-09-08 15:56:55

标签: javascript jquery json

如何从事件处理程序中的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.
        });                         
    }
}

如何在不在函数外定义元素的情况下访问元素?
编辑:类型应该是元素

2 个答案:

答案 0 :(得分: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,这是一个错误吗?

答案 1 :(得分: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 值。即把它放在单独的上下文中解决问题。