zepto 阻止事件冒泡失效

事情是这样的:

html

js

$('body').on('click', '.div1', function(event) { 
     alert('a on c');
     event.stopPropagation();
 }); 
$('body').on('click', '.div2', function(event) { 
      alert('a on b');
 });

这种情况事件都绑定到了body上,当我单击div1的时候触发事件,但是我不想让div2上边的事件也触发,所以我要阻止事件冒泡。那么问题来了,不生效,div2上边的事件还是触发了。经过各种阻止事件冒泡的方法(return false; ),结果还是一样无效。
通过网络查询没有找到自己满意的答案。有一个网友说了一下方式:

$('.div1').on('click', function(event) { 
        alert('a on c'); 
        event.stopPropagation();
 }); 
$('.div2').on('click', function(event) { 
       alert('a on b');
 });

当这不是我想要的结果。在某些情况下,我必须把事件绑定到一个父级元素的形式。尤其是触发事件的元素是后来动态加载进来的。
后来特地用jQuery 也做了测试。jQuery 完全可以实现没有任何的问题.

jQuery源码

 stopPropagation: function() { 
        var e = this.originalEvent; 
        this.isPropagationStopped = returnTrue;
        if ( e && e.stopPropagation ) {
             e.stopPropagation();
        } 
}

Zepto源码

e = compatible(e);
if (e.isImmediatePropagationStopped()) return;
e.data = data;
var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args));
if (result === false) e.preventDefault(), e.stopPropagation();
return result

jQuery 源码还算看的懂,是要实现这个阻止冒泡,但是Zepto 这个就完全搞不懂了,所以在源码上找到问题的根源是破灭了。

你可能感兴趣的:(zepto 阻止事件冒泡失效)