【发布时间】:2019-11-15 15:21:14
【问题描述】:
有些人有这个问题,但我没有看到任何适合我的答案。
这里是html:
<div id="page">
......
<ul>
<li role="presentation">
<a id="selection"...... ></a>
</li>
<li role="presentation>
<a id="xxxx"></a>
</li>
<li role="presentation">
<a id="yyyyy"></a>
</li>
</ul>
.......
</div>
这里是使用 Mootools 的 javascript(没有选择):
window.addEvent('domready', function() {
var myDivPage = document.id('page');
var as = myDivPage.getElements('li[role=presentation] a');
//as is an array of 3 elements
Array.each(as, function(element, index) {
if(element.id !== 'selection') {
element.addEvent("click", function(event) {
event.preventDefault();
event.stopPropagation();
alert("did you save?");
});
}
});
});
该事件确实是附加的,但是当我单击我的链接时,alrt 会显示两次,就好像该事件发生了两次一样。如您所见,我停止了传播,那怎么会发生呢?
谢谢
【问题讨论】:
-
添加
stopImmediatePropagation而不是stopPropagation有什么意义 -
我没有 Mootools,所以测试你的例子对我来说是不可能的。您是否尝试在每个新作用域的开头放置一个 console.log(...) 行,以查看每个作用域被调用了多少次?您可能会多次插入事件处理程序。一种可能的解决方案是清除现有的 onclick 处理程序,但您需要命名的单击处理程序或克隆元素才能使用普通的 vanilla javascript 执行此操作。 stackoverflow.com/a/9251864/9035707 -- 更好的选择是弄清楚为什么它被添加了两次。
标签: javascript events mootools