Javascript AddEventLister在连接后立即启动

Javascript AddEventLister在连接后立即启动,javascript,onclick,addeventlistener,Javascript,Onclick,Addeventlistener,我想知道如何正确地将类似onClick的事件侦听器添加到动态div中。下面是我的代码片段: var $menu = new Array(2); createDiv('yes'); function createDiv(title) { var $class = 'menuLink'; var $title = 'title'; for(var i=0; i<$menu.length;i++) { $title = 'title'; var newdiv = doc

我想知道如何正确地将类似onClick的事件侦听器添加到动态div中。下面是我的代码片段:

var $menu = new Array(2);
createDiv('yes');    

function createDiv(title) {

var $class = 'menuLink';
var $title = 'title';

for(var i=0; i<$menu.length;i++)
{
   $title = 'title';
   var newdiv = document.createElement('div');
   newdiv.setAttribute('class', $class);
   newdiv.setAttribute('id', 'item'+i);

   newdiv.addEventListener('onclick', clickHandle(newdiv.id),false);

   if (title) 
   {
     newdiv.innerHTML = $title;
   } else {
 newdiv.innerHTML = "No Title";
   }

   document.getElementById('menu').appendChild(newdiv);
   showMenu();   
 }
} 

function clickHandle(e)
{
if(e == 'item0')
{
    alert('Link is' + ' ' + e);
}else{
    alert('Another Link');
}
}
var$菜单=新数组(2);
createDiv(“是”);
函数createDiv(标题){
var$class='menuLink';
var$title='title';
对于(var i=0;i

newdiv.addEventListener('onclick', clickHandle(newdiv.id),false);

事件未被触发,但您正在调用
clickHandle(newdiv.id)
,并将此调用的结果传递给
addEventListener
。还要注意,事件的名称是
'click'
,而不是
'onclick'
。 另外,变量newdiv被下面的循环改变了,这就是为什么我建议将它封装在一个闭包中以防止它的变化

您也可以使用此选项:

(function(newdiv){
   newdiv.onclick = function(){clickHandle(newdiv.id)};
})(newdiv);

既然已经在使用jquery,为什么不在事件绑定上使用它呢

它的跨浏览器兼容,所以你不必再担心IE了

试一试 。单击()


你认为他为什么要使用jQuery?不,我没有使用jQuery。我只是喜欢用$sign声明变量,这只是我喜欢的一种方式。谢谢你,伙计,我正在从As3迁移到Js,所以我想在使用库之前尽可能多地坚持使用Js。哦,对不起,我今天早上刚刚给出了一个快速的答案你的$signs让我想:-)@TomKossmann哦,不,别担心,任何帮助都是非常感谢的。问候。嗨@dystroy,到目前为止没有结果。你的第一次和第二次方法将onclick应用于菜单项(div),但当我点击其中一个div时,所有这些div都会提醒“Item6”(这是我需要并动态创建的Div/按钮的数量)。最后一个是jQuery,我想了解如何首先使用js构建它。我使用了数组方法,但其结果与您的建议相同:单击一个Div后,其Id为item6。这是添加项:newdiv.setAttribute('Id','item'+I);$menu.push(newdiv);$menu[i].onclick=function(){clickHandle(newdiv.id)};谢谢你,伙计。@Diego请看编辑。我的解决方案在迭代时将newdiv的值封装在一个闭包中,这样它就不会改变。你是Daman@dystroy。它工作起来很有魅力。伙计,有个小问题,我无法得到这个实现(我从AS3学习了一些编码,其中函数中的函数几乎被禁止,因为使用它们的问题超出了它们的范围)。因此,encloures的概念在js回来后真的很有用。将函数放在括号中有什么作用?它有什么作用?为什么它有最后一行(newdiv)谢谢你的旁注,让我们真正了解这条伟大的线路是如何运作的。无论如何,谢谢你!问候。
(function(newdiv){
   newdiv.onclick = function(){clickHandle(newdiv.id)};
})(newdiv);