说你妹
说你妹
  • 发布:2015-04-10 17:47
  • 更新:2015-05-03 11:26
  • 阅读:12640

通过on()方法绑定tap事件问题

分类:MUI

通过mui.on()绑定tap事件,重复绑定几次,它就会被触发几次,也没有jquery的off方法进行撤销绑定,只能改成用jquery方法了。。。。。

mui.js中$.fn.on()结尾处代码感觉不起作用:

        **////避免多次on的时候重复绑定  
        element.removeEventListener($.EVENT_CLICK, preventDefault);  
        //click event preventDefault  
        element.addEventListener($.EVENT_CLICK, preventDefault);**  
2015-04-10 17:47 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

不要每次请求之后都绑定,而是在页面初始化的时候,就on一次就行了。on事件本来的一个优点就是可以处理动态添加的元素。

  • yomz

    你好,on是写在init里吗?我定义了一个添加元素的function函数,点击就添加一段innerhtml,但是新增的元素点击没有响应,如numbox我添加了mui('.mui-numbox').numbox();解决了,但是左滑删除这种新增后改如何绑定呢,求指教

    2016-03-14 16:59

  • DCloud_UNI_FXY

    回复 yomz:on事件是只初始化一次,如果是我们提供的UI控件,比如numbox。那就需要你每次有新增,就给新增的元素动态初始化一次。左滑删除这些是不需要你重复绑定的

    2016-03-14 17:35

  • yomz

    回复 DCloud_UNI_FXY:我innerhtml了id='aa'的div块,出来的左滑只有原始的有效,求解,谢谢!

    <form id="add" class="mui-input-group">

    <div id="aa" class="mui-input-row">

    <ul id="OA_task_1" class="mui-table-view">

    <li class="mui-table-view-cell">

    <div class="mui-slider-right mui-disabled">

    <a class="mui-btn mui-btn-red">删除</a>

    </div>

    <div class="mui-slider-handle">

    左滑显示删除按钮

    </div>

    </li>

    </ul>

    </div>

    </form>

    function insertRow() {

    var table = document.body.querySelector('.mui-input-group');

    var cells = document.body.querySelectorAll('.mui-input-row');

    for (var i = cells.length, len = i + 1; i < len; i++) {

    var div = document.createElement('div');

    div.id = 'aa' + i;

    div.className = 'mui-input-row';

    div.innerHTML = document.getElementById("aa").innerHTML;

    //新纪录插到最前面;

    table.insertBefore(div, table.firstChild);

    }

    };

    2016-03-14 17:58

太阳光

太阳光

你是不是使用mui("").on("tap","a",function(){})这种匿名函数来绑定的?如果是这种是无法取消绑定的。
从源码里可以知道必须是绑定相同函数名才可以以防重复绑定,如:

function fun(){}  
mui("#id").on("tap","a",fun);
DCloud_UNI_FXY

DCloud_UNI_FXY

目前暂未提供off方法。后续版本会提供支持。

你的业务需求是什么?什么情况下,需要off掉?

说你妹

说你妹 (作者)

我是动态创建列表,单击列表会进入详情页面,列表数据是通过分批请求的,相当于分页显示一样,
我第一次请求4条记录,此时绑定单击事件;当我下拉刷新时在请求4条记录,此时列表总共有8条记录了,我mui(".classname").on("tap","a",fun);绑定单击事件,那第一次请求的4条记录就会绑定了2次单击事件。
所以我想在绑定单击事件之前,解绑所有单击事件。

大萝卜

大萝卜

检查页面中是否重复加载了<script src="js/mui.min.js"></script>

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