我想知道如何正确添加像onClick这样的Event Listener到动态div。这里是我的片断:AddEvenLister在连接后立即触发
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');
}
}
这里是我的问题,该段工作正常,它创建了我的div,增加了ID的价值观和所有,但该事件一旦事件附加触发关闭,因此,尽管for循环创建div的警报窗口说:链接是item0,紧接着它说:另一个链接。
我误解了吗? (我在AS3中使用了这种方法的无数次与预期的结果,只是附加一个函数等待点击)。我想要的是我的Div等待用户点击它们,而不是在连接后立即开始。感谢您对此提供的任何提示。问候。
Ps。 IE不支持addEventListener,但是我想在解决这个问题之前先到疯狂的IE海洋,但是我也会很欣赏IE的方法。 - 我尝试了“onclick”,只是点击了addEventListener行,两者的结果都是相同的。
嗨@dystroy,到目前为止没有结果。您的第一种和第二种方法将onclick应用于菜单项(div),但是当我点击其中一个div时,它们都会提示'Item6'(这是我需要动态创建的divs /按钮的数量)。最后一个是jQuery,我想了解如何使用js首先构建它。我使用了一种数组方法,但其结果与您的两个建议都是一样的:在单击一个Div后,其ID是item6。这是增加:newdiv.setAttribute('id','item'+ i); $ menu.push(newdiv); $ menu [i] .onclick = function(){clickHandle(newdiv.id)};谢啦。 – Diego
@Diego请参阅编辑。我的解决方案在迭代时将newdiv的值包含在闭包中,以便它不会改变。 –
你是da man @dystroy。它像一个魅力。人只是一个小问题,我无法得到这个实现(我从AS3学到了一些函数,其中函数内的函数几乎被禁止,因为使用它们的范围之外的问题)。所以,现在js又回来了,那么encloures的概念是非常有用的。这个功能在括号内是什么?它有什么作用?为什么这条线有最后一个(newdiv)?男人感谢一些旁白的笔记,以真正了解这条伟大的线条是如何工作的。男人无论如何感谢很多!问候。 – Diego