【发布时间】:2023-04-06 22:05:01
【问题描述】:
我的项目中有以下代码。我正在获取.pagination 下的所有锚元素并对其进行迭代并为每个元素添加一个事件。
我添加了alert 以证明元素实际上已加载到页面中并且它们的类型正确(HTMLAnchorElement),但是当我单击它们时,没有任何反应。我什至将事件更改为其他各种类型,例如mousedown、select 等。
$(function() {
[...document.querySelectorAll('.pagination a')].forEach(e => {
alert(Object.prototype.toString.call(e)); // [object HTMLAnchorElement]
e.addEventListener('click', function(ev) {
alert('Click!');
if (!this.classList.contains('collapsed')) {
// Prevents last collapsable from being closed
ev.stopPropagation();
}
});
});
});
有人能告诉我为什么我的事件没有触发吗?
【问题讨论】:
-
正如 blanknamefornow 在他们的回答中所说,代码按原样工作。您必须检查链接上没有覆盖透明元素,或者在 CSS 中为链接设置
pointer-events: none。为了更方便的调试,使用 DevTools 来调试(例如console.log)而不是警报。另外,收集的a元素是否具有href属性?如果是这种情况,您可能希望阻止默认操作而不是阻止传播? -
@Teemu 没有覆盖透明元素。 Bootstrap 的链接上还有其他事件可以毫无问题地触发,并且 CSS 悬停效果也可以使用。我在另一个项目中出于相同目的使用了这个精确的 sn-p,它可以正常工作。
-
不管它是什么,它不能被提供的代码复制,就像说的那样,它可以按原样工作。你必须建立一个minimal reproducible example。
标签: javascript html events dom-events