我试图阻止 JavaScript 事件继续传播,使用 YUI。以下是一些最小的 HTML 和一些最小的 JavaScript,它们演示了这个问题:
HTML:
<a href="#foo" onClick="fooClickTest()" id="foo">foo</a> 
<a href="#bar" id="bar">bar</a> 
JavaScript:
function fooClickTest(e) {
    alert('fooClickTest');
    YAHOO.util.Event.addListener('bar', 'click', barClickTest1);
    YAHOO.util.Event.addListener('bar', 'click', barClickTest2);
    YAHOO.util.Event.addListener('bar', 'click', barClickTest3);
    YAHOO.util.Event.preventDefault(e);
}
function barClickTest1(e) {
    alert('barClickTest1');
    YAHOO.util.Event.preventDefault(e);
}
function barClickTest2(e) {
    alert('barClickTest2');
    YAHOO.util.Event.preventDefault(e);
    YAHOO.util.Event.stopEvent(e);
// Also tried:
//  YAHOO.util.Event.stopPropagation(e);
// and:
//        if (e.stopPropagation) {
//            e.stopPropagation();
//        } else {
//            e.cancelBubble = true;
//        }
}
我期望发生的是用户可以单击foo添加三键处理程序,然后单击bar. 然后,用户将看到两个警报,barClickTest1并且barClickTest2。相反,会出现所有三个警报。YAHOO.util.Event.stopEvent(e)不符合我的预期,即阻止事件传播到barClickTest3.
我已经在 Firefox 3.0.7 和 Safari 3.2.1 中测试了我的代码。正如您在上面看到的,我也尝试过YAHOO.util.Event.stopPropagation(e)and e.stopPropagation()。他们都没有成功。
这显然是一个人为的例子,尽管它确实证明了这个问题。在真正的解决方案中,我只会在满足某些条件时才阻止事件传播。
我对 JavaScript 事件的理解是不是一团糟?我如何实现我的目标?