javascript循环.onclick和查询

时间:2017-11-02 00:33:04

标签: javascript django

因此,这导致最后一个元素具有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);
        });         
    }
})

1 个答案:

答案 0 :(得分:0)

我很好奇snapshot.val()的样子,你能发一个例子(console.log(JSON.stringify(snapshot.val(),undefined,2)))吗?

其他一些代码正在生成html元素,而您正在等待其他代码创建元素?

我不确定为什么你需要waitForLoad,如果你没有jQuery(document.ready),你可以在</body>标签之前添加你的脚本或使用{{1} }属性(假设您要添加事件侦听器的元素是静态的)。

看起来你没有在for循环中正确设置闭包,你可能想做这样的事情:

defer