在javascript中删除preventDefault和stopPropagation

时间:2013-06-15 08:18:48

标签: javascript

嗨我需要阻止用户点击某个元素时的默认操作,并且仅阻止其默认操作,并且需要执行其他操作。我用过的是

document.body.onclick = function (e) {
    e.preventDefault();
    e.stopPropagation();
}

但现在的问题是,在执行上述操作后,我需要删除preventDefaultstopPropagation,因为在此之后没有任何链接(a href)被触发。那么如何在执行后撤消这个?请注意,它是纯JavaScript代码,我不使用像jquery这样的库。所以我无法使用.bind.unbind。对此有任何想法将不胜感激。

3 个答案:

答案 0 :(得分:1)

不要将事件绑定到正文,将事件绑定到您需要阻止的元素:

document.getElementById('theTarget').onclick = function(e) {
    // ...
}

答案 1 :(得分:1)

您可以使用bindunbind

复制addEventListenerremoveEventListener的行为
function stopIt(e) {
  e.preventDefault();
  e.stopPropagation();
}

document.body.addEventListener("click", stopIt);

// then later

document.body.removeEventListener("click", stopIt);

注意:IE< = 8不支持addEventListenerremoveEventListener,因此您需要使用此处提到的attachEvent - https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener#Compatibility

答案 2 :(得分:1)

如果我正确理解您的要求,我担心您无法撤消e.preventDefault();。但默认情况下,处理程序函数将在执行默认操作之前执行。因此,在您的情况下,您根本不需要e.preventDefault();。并且请记住仅将事件侦听器附加到<a>标记

var aTags = document.getElementsByTagName("a");

for (var i=0;i<aTags.length;i++){
    aTags[i].onclick = function (e) {
       // just perform your action here, don't need e.preventDefault();
    }
}