首页 > 网站 > WEB开发 > 正文

在用zepto的on事件中遇到的一个奇怪问题.

2024-04-27 14:15:36
字体:
来源:转载
供稿:网友

在用zepto的on事件中遇到的一个奇怪问题.

最近在一个项目运用zepto的on事件绑定,发现与jquery的事件有很大的区别,不知道是不是zepto的问题,

HTML结构如下

<div>      <ul id="test1">    <li><a id="test2">11111111</a></li>      </ul></div>

然后给上面的test1 和test2绑定事件,代码如下

$(document).on("click","#test1",function(){    alert("点击了父节点")});$(document).on("click","#test2",function(){    alert("点击了子节点")});

此时,我点击a标签.理论上应该弹出 alert("点击了子节点"),alert(弹出了父节点);

可是实际上发现,用zepto的事件绑定的时候却恰好相反,先弹出了父节点,再弹出子节点,用jquery的事件绑定,一切正常,后来把事件的绑定顺序换下,先绑定子节点的再绑定父节点的则正常.

此为第一个感觉很不合理的地方.

最坑爹的第二点来了.

此时如果我需要阻止事件冒泡,理论上来说,只需要加上阻止冒泡的方法就行了.代码如下

$(document).on("click","#test2",function(event){    alert("点击了子节点");    event.stopPRopagation();});$(document).on("click","#test1",function(){    alert("点击了父节点")});

此时,在jquery下的确没有任何问题,但是在zepto下则失效.于是只好查看源码,发现代码如下

  handler.del = getDelegate && getDelegate(fn, event)        var callback = handler.del || fn        handler.proxy = function (e) {            var result = callback.apply(element, [e].concat(e.data))            //当事件处理函数返回false时,阻止默认操作和冒泡            if (result === false) e.preventDefault(), e.stopPropagation()            return result     }

于是我按照上面的要求修改.代码如下:

$(document).on("click","#test2",function(event){    alert("点击了子节点");    return false;});$(document).on("click","#test1",function(){    alert("点击了父节点")});

发现还是不行.看来zepto与Jquery还是有很大的区别,不知道各位有没有遇到这个问题,或者知道这个问题的根本原因.当然如果纯粹只是为了实现这个功用如下代码也可以解决

$("#test2").on("click",function(event){    alert("点击了子节点");    return false;});$("#test1").on("click",function(){    alert("点击了父节点")});

上面的绑定方式就一切正常 在zepto下.

我就想知道为什么第一种的绑定方式为什么不行.欢迎提出看法


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表