2012-11-24 65 views
0

我想知道如何正确添加像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行,两者的结果都是相同的。

回答

2

更换

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

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

没有触发的事件,但你打电话clickHandle(newdiv.id)并通过此调用的结果addEventListener。还要注意事件的名称是'click',而不是'onclick'。 此外,变量newdiv由以下循环更改。这就是为什么我建议将它封入封闭体以防止其变化。

你也可以使用这样的:

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

嗨@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

+0

@Diego请参阅编辑。我的解决方案在迭代时将newdiv的值包含在闭包中,以便它不会改变。 –

+0

你是da man @dystroy。它像一个魅力。人只是一个小问题,我无法得到这个实现(我从AS3学到了一些函数,其中函数内的函数几乎被禁止,因为使用它们的范围之外的问题)。所以,现在js又回来了,那么encloures的概念是非常有用的。这个功能在括号内是什么?它有什么作用?为什么这条线有最后一个(newdiv)?男人感谢一些旁白的笔记,以真正了解这条伟大的线条是如何工作的。男人无论如何感谢很多!问候。 – Diego

0

既然你已经使用jquery为什么不能用它在你的事件绑定?

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

尝试 。点击();

http://api.jquery.com/click/

+0

你为什么认为他在使用jQuery? – Esailija

+0

Nop man,我没有使用jQuery。我只想用$符号声明变量,这只是我喜欢的一种方式。谢谢你,我正在从As3移动到Js,所以我想尽可能地将它们粘到js上,以便在使用库之前习惯它。 – Diego

+0

哦,对不起,我刚刚给了它一个快速的答案今天早上,你的$标志让我想到:-) –

相关问题