事件不会触发已添加到动态创建的div中的事件

时间:2011-12-24 16:54:43

标签: javascript javascript-events

我在javascript工作。在大多数情况下,我已经能够很好地添加事件监听器,但对于我动态生成的div,无论我添加到它们的任何事件,似乎都没有发生。代码是:

 for(var i=0; i<sceneNumber; i++){
    var a=i;
    if(i>2)
        a=i%3;
    sceneArray[i]=document.createElement('div');
    sceneArray[i].className="border"+a;
    if(i%2==1)
        sceneArray[i].style.left=0;
    else
        sceneArray[i].style.left=(i+1)*100;
    sceneArray[i].style.top = i*100+100;
    sceneArray[i].onclick= function(){console.log("fire212");
                                      if(extend1){
                                          console.log("scenelistener");
                                          currentArrow.rotate(degrees);
                                        currentArrow.scale(desiredLength/arrowLength,1);
                                      }
                                     };
console.log(sceneArray[i].onclick);
    document.getElementsByTagName('body')[0].appendChild(sceneArray[i]);
    sceneArray[i].style.zIndex =  -1;
    console.log(sceneArray[i]);
    }

正如你所看到的,我至少应该在控制台中获得“fire212”,但即使这样也不会发生。可能出现什么问题?

2 个答案:

答案 0 :(得分:0)

您应该实现类似于JQuery live()或on()方法的东西。以下帖子可以帮到你。

http://www.alfajango.com/blog/exploring-jquery-live-and-die/

答案 1 :(得分:0)

for(var i=0; i<sceneNumber; i++){
    var a=i;
    if(i>2)
        a=i%3;
    sceneArray[i]=document.createElement('div');
    sceneArray[i].className="border"+a;
    if(i%2==1)
        sceneArray[i].style.left=0;
    else
        sceneArray[i].style.left=(i+1)*100;
    sceneArray[i].style.top = i*100+100;
    sceneArray[i].onclick=onclickevent();
console.log(sceneArray[i].onclick);
    document.getElementsByTagName('body')[0].appendChild(sceneArray[i]);
    sceneArray[i].style.zIndex =  -1;
    console.log(sceneArray[i]);
    }
 function onclickevent(){
           console.log("fire212");
           if(extend1){
           console.log("scenelistener");
           currentArrow.rotate(degrees);
           currentArrow.scale(desiredLength/arrowLength,1);
           }
         }