j***@foxmail.com
j***@foxmail.com
  • 发布:2017-02-10 14:32
  • 更新:2017-07-17 16:35
  • 阅读:2114

【报Bug】mui批量绑定事件标签中含有SVG标签事件触发出错

分类:MUI

详细问题描述


<nav class="mui-bar mui-bar-tab home_nav ">  
            <ul>  
                <li class="active">  
                    <a id="homeTab" class="mui-tab-item mui-active" href="javascript:void(0)" data-href="home.html">  
                        <svg class="icon" aria-hidden="true" style="font-size: 24px;">  
                            <use xlink:href="#icon-shouyefill"></use>  
                        </svg>  
                        <p>首页</p>  
                    </a>  
                </li>  
                ......  
            </ul>  
        </nav>  

            mui('.home_nav').on('tap', 'mui-tab-item', function(e) {  

            });  

重现步骤
点击SVG小图标触发事件时 “不定时”报错,mui.js 608行报错 ,(即有时候报错,有时候不报错)
Uncaught TypeError: Cannot call method 'contains' of undefined at js/mui.js:608

报错部分代码608:

if (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) {  
                    break;  
                }

在608行加入console.log(target);调试发现不报错的情况下 target输出为 SVG标签,<svg class="icon" aria-hidden="true" style="font-size: 24px;"><use xlink:href="#icon-shouyefill"></use></svg>,
报错时 target输出为 SVGElementInstance object.

望解决

联系方式
273289595
15003999275

2017-02-10 14:32 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

 if (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || (target.classList && target.classList.contains('mui-disabled')))) {  
                    break;  
                }

修改一下源码,然后测试下是否有问题

  • j***@foxmail.com (作者)

    这样改我试过,报错倒是不报了,但是tap事件没有正常触发。因为没能获取到正常的dom元素,不能按正常的dom结构一直向父级找到对应绑定的事件。SVGElementInstance object 只target.parentNode向上找一层,就返回了。

    2017-02-10 17:57

1***@qq.com

1***@qq.com - Keep The Beginner's Mind

我也遇到同样的问题,怎么解决

王者地带

王者地带 - 5+混合APP开发教程网 | http://www.html5-app.com | 咨询QQ: 2564034335

 点击没反应  
 mui('.home_nav').on('tap', 'mui-tab-item', function(e) {  

            });  

应该是 .mui-tab-item,前面加个点,你是给.mui-tab-item这个类绑定tap事件  
 mui('.home_nav').on('tap', '.mui-tab-item', function(e) {  

            });  

该问题目前已经被锁定, 无法添加新回复