4

嗨,我需要在用户单击某个元素时阻止默认操作,并仅在该时间阻止其默认操作,并且需要执行一些其他操作。我用过的

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

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

4

3 回答 3

3

您可以复制bindunbind使用的行为addEventListenerremoveEventListener

function stopIt(e) {
  e.preventDefault();
  e.stopPropagation();
}

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

// then later

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

注意:IE <= 8 不支持addEventListenerand removeEventListener,所以你需要使用attachEvent这里提到的 - https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener#Compatibility

于 2013-06-15T08:24:35.923 回答
2

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

document.getElementById('theTarget').onclick = function(e) {
    // ...
}
于 2013-06-15T08:23:12.740 回答
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();
    }
}
于 2013-06-15T08:56:45.800 回答