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

时间:2019-11-15 15:21:14

标签: javascript events mootools

有些人遇到了这个问题,但是我没有找到适合我的答案。

这是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?");
            });
       } 
   });

 });

该事件确实已附加,但是当我单击链接时,警报显示两次,就像该事件发生了两次一样。如您所见,我停止了传播,这怎么可能发生?

谢谢

2 个答案:

答案 0 :(得分:0)

下面的if条件在循环内。

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

对每个不等于element.id的{​​{1}}进行检查。那么如果条件为真,那么多少次呢? 2一个用于selection,另一个用于id="xxxx"

仅使用一次即可触发点击事件

id="yyyyy"

答案 1 :(得分:0)

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

$$('#page li[role=presentation] a:not(#selection)').addEvent("click",
   function(event) { event.stop(); alert("Did you save?"); })

尽管如此,这将是一种更加实用的方式。