如何从事件处理程序中的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.
});
}
}
如何在不在函数外定义元素的情况下访问元素?
编辑:类型应该是元素
答案 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 值。即把它放在单独的上下文中解决问题。