2011-11-28 64 views
0

我需要在button标记上附加单击事件。我试过addEventLister,但它仍然不起作用。Click事件未附加到按钮

widget.innerHTML = "<button id=\"w_btn\">do action</button>"; 

w_btn = document.getElementById("w_btn"); 

w_btn.addEventListener("click", 
    function() { 
     alert("sdf"); 
    } 
); 
+0

你习惯了ActionScript吗?因为我不认为addEventListener在JS中工作。 – Fredy31

+0

什么是'widget'? – Neal

+4

@ Fredy31是**不是** true。 – Neal

回答

2

在某些浏览器中,第三个选项是required
下面的代码应该工作在每体面浏览器(小提琴:http://jsfiddle.net/5hnPP/2/):

var widget = document.getElementById("widget"); 
widget.innerHTML = "<button id=\"w_btn\">do action</button>"; 
var w_btn = document.getElementById("w_btn"); //Added var 
w_btn.addEventListener("click", 
    function() {alert("test")}, 
    false 
); 

另一个可能的原因是与ID w_btn另一元件时,该元件#widget之前出现的存在。为了解决这个问题,你可以调整你的代码。由于您覆盖了#widget元素的内容,因此第一个也是唯一的内容就是按钮。定义:

var w_btn = widget.firstChild; 

最后一种可能性是您处于严格模式。在严格模式下,使用未声明的变量是禁止

+0

我有FF,Chrome和IE9的工作没有第三个可选参数... – MilkyWayJoe

+0

@ThiagoSantos旧版本的FF需要第三个参数。我聆听了一些可能的问题原因。最后的选择似乎是可能的。 –

+0

这是真的..只是尝试与旧版本 – MilkyWayJoe

1

嗯。我为你制作了一个jsFiddle,在这里:http://jsfiddle.net/5hnPP/1/。使用“真实”按钮的作品。您可能会遇到DOM问题。让我们知道我是否找到更有用的东西。

编辑:嗯,即使添加按钮动态为我工作。你是否正确地命名了你的元素? (注意更新的jsFiddle链接 - 已更新标记)。