因此,这导致最后一个元素具有onclick函数。没有别的办法。 我试图通过将我包裹在()中来遵循先前的答案,但这似乎没有做任何事情......
function waitForLoad(id, callback){
var timer = setInterval(function(){
if(document.getElementById(id)){
clearInterval(timer);
callback();
}
}, 100);
}
// to skip the LocationSet and LocationName, because we want to reuse our old Location
ref = new Firebase("https://iplus1app.firebaseio.com/");
userLocs = ref.child("users/{{ user.username }}/locations");
// create the button function to redirect for each Location that exists
userLocs.once("value", function(snapshot) {
var keys = Object.keys(snapshot.val())
for (i = 0; i < snapshot.numChildren(); i++) {
var locationKey = keys[i]
//var locationKey = Object.keys(snapshot.val()[keys[i]])
var nickName = snapshot.val()[locationKey]['name']
locLat = snapshot.val()[locationKey]['position']['lat']
locLng = snapshot.val()[locationKey]['position']['lng']
locNick = snapshot.val()[locationKey]['name']
waitForLoad(nickName, function(){
document.getElementById(nickName).onclick = (function(i) {
return function (i) {
tempRef = ref.child("users/{{ user.username }}/temp_location");
tempRef.set( {
position: {
lat: locLat,
lng: locLng
},
name: locNick
})
location.href = "{% url 'tutorLocationActivities' %}";
}
})(i);
});
}
})
答案 0 :(得分:0)
我很好奇snapshot.val()
的样子,你能发一个例子(console.log(JSON.stringify(snapshot.val(),undefined,2))
)吗?
其他一些代码正在生成html元素,而您正在等待其他代码创建元素?
我不确定为什么你需要waitForLoad
,如果你没有jQuery(document.ready
),你可以在</body>
标签之前添加你的脚本或使用{{1} }属性(假设您要添加事件侦听器的元素是静态的)。
看起来你没有在for循环中正确设置闭包,你可能想做这样的事情:
defer