2012-09-17 225 views
0

可能重复:
JavaScript: remove event listener如何删除事件侦听器?

我试图从导航删除一些事件监听器,经过 “开始” 按钮被点击。我似乎无法得到任何东西发射。

这里是用做进出口代码:

var startButton = document.getElementById('startButton'); 

startButton.addEventListener('click', function() { 
    hrNav.removeEventListener('mousedown', highlight, false); 
    alert('Did it remove the listener?'); 
}, false); 

,即时通讯试图删除事件侦听是:

if(hrNav.addEventListener){ 
    hrNav.addEventListener('mousedown', highlight, false); 
    return true; 
} else { 
    hrNav.attachEvent('on'+'click', highlight); 
    return true; 
} 

所有这一切都被包裹在一个jQuery document.ready功能。

+0

什么让你觉得'removeEventListener' *不*移除事件侦听器? – 0x499602D2

+0

是否有任何元素下的启动按钮? –

+0

@David我认为问题在于'startButton'的eventListener没有触发。 –

回答

0

既然你说你使用jQuery。尝试这样:http://jsfiddle.net/MmFb2/4/

JS

$(function(){ 
    var startButton = $('#startButton'); 
    var hrNav = $('#hrNav'); 

    startButton.bind('click', function() { 
     hrNav.unbind('click'); 
    }); 

    var toggle = false; 
    hrNav.bind('click', function(){ 
     var ele = $(this); 
     if(toggle){ 
      ele.css('background-color', ''); 
     }else{    
      ele.css('background-color', 'yellow'); 
     } 
     toggle = !toggle; 
    }); 
}); 

HTML

<input id="startButton" type="button" value='click to disable' /> 
<div id="hrNav">Click me to highlight</div>​ 
+0

“去除绑定”与删除我之前设置的事件侦听器相同吗? – mdance

+0

是的,它是jQuery对该操作的抽象。而不必考虑特定浏览器的所有特性。 jQuery创建了一个单一的入口点,以抽象出所有这些差异,使开发人员可以专注于手头的任务,而不是如何在IE6-10,Firefox,Chrome,Opera,Safari等中实现它。这不仅仅适用于事件绑定/解除绑定,还有DOM操作和DOM元素检索。我认为值得你投资。 –

相关问题