因此,这已经让我烦扰了很长一段时间。一旦我使用相同的代码将侦听器添加到另一个元素,事件侦听器似乎就消失了。
我有一个JavaScript构造函数,去不服这样的:
function TimeBlock(c, local_count){
/* creates a timeblock */
.
.
.
_getel(this.id).addEventListener('mouseover', this.displayPopup)
_getel(this.id).addEventListener('mouseout', this.killPopup)
}
,基本上它创建一个对象TimeBlock并分配给它的两个事件处理程序,这是在TimeBlock.prototype定义像这样:
TimeBlock.prototype = {
.
.
.
block = getTimeBlock(e.target.id)
//do something
},
killPopup: function(e){
// //do something else
}
}
它的工作原理。我打电话new Timeblock (some_parameters)
,我得到了我的时间段,它将元素创建到html(它是一个div)并将侦听器分配给它。我测试它,它工作正常。但是一旦我再次调用它,我就会创建一个新的TimeBlock元素,并有工作监听器,但前一个元素停止工作。这就像将这些侦听器分配到新元素上会取消应该在前一个元素上的侦听器。
什么是更奇怪的是,我已经通过JavaScript控制台手动分配这些监听器,它在那里工作得很好。我正在使用Firefox 7.0.1和Firebug进行这些测试。
非常感谢
边注:'在IE不支持addEventListener'直到IE9,因此,除非您可以忽略IE6,IE7和IE8用户,如果它存在,则需要使用'addEventListener';如果不存在,则需要使用'attachEvent'(微软的原始版本)。这不是你遇到的问题(这是* next *问题,你会有;-))。或者,当然,使用任何好的JavaScript库[jQuery](http://jquery.com),[Prototype](http://prototypejs.org),[YUI](http://developer.yahoo.com/ yui /)或[其他任何一个](http://en.wikipedia.org/wiki/List_of_JavaScript_libraries)喜欢为你平滑这些差异。 –
我不认为'这'是这里的问题。我尝试将这些函数设置为实现相同(有缺陷)结果的全局函数。 – user986730
'@ user':不知道还有什么可以告诉你的,从根本上把事情搞好并不会导致你描述的行为。我用另一个想法更新了我的答案,并用一个演示我所描述技术的实例来更新我的答案。 –