Javascript 尽管设置了preventdefault,但事件单击触发了两次

Javascript 尽管设置了preventdefault,但事件单击触发了两次,javascript,events,mootools,Javascript,Events,Mootools,有些人有这个问题,但我没有看到任何适合我的答案 以下是html: <div id="page"> ...... <ul> <li role="presentation"> <a id="selection"...... ></a> </li> <li role="presentation> <a id="xxxx"></a>

有些人有这个问题,但我没有看到任何适合我的答案

以下是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>
事件确实已附加,但当我单击我的链接时,alrt显示两次,就好像事件发生两次一样。正如你所看到的,我停止了传播,那么这是怎么发生的呢


感谢您

如果条件在循环内,请执行以下操作

if(element.id !== 'selection')
对每个
元素.id
进行检查,该元素不等于
选择
。那么,如果条件为真,有多少次?2一个用于
id=“xxxx”
,另一个用于
id=“yyyyy”

对于仅触发一次的单击事件,请使用

if(element.id === 'selection')

显示的代码似乎很好。验证您的事件处理程序实际上没有添加两次(在Array.each循环之前放置一个警报)


这将是一种更加mootools-y的方法。

如何添加
stopImmediatePropagation
而不是
stopPropagation
我没有mootools,因此测试您的示例对我来说是不可能的。您是否尝试过在每个新作用域的开头放一个console.log(…)行,以查看每个作用域被调用了多少次?您可能多次插入事件处理程序。一种可能的解决方案是清除现有的onclick处理程序,但您需要一个命名的click处理程序或克隆元素,以便能够使用普通的javascript实现这一点更好的选择是找出为什么它会被添加两次。
if(element.id === 'selection')
$$('#page li[role=presentation] a:not(#selection)').addEvent("click",
   function(event) { event.stop(); alert("Did you save?"); })