收藏
回答

小程序能否主动触发事件

我现在要做一个批量删除功能,点击一个【全选】的checkbox,就能全选列表中所有的checkbox,

我使用的是在data里放selectAll:false的变量,全部的checkbox的checked="{{selectAll}}",

然后改变selectAll:true就可以全部显示选中了,但是这样不会触发bindchange,没办法获取所有的id号,请问有办法获取所有的id吗?


最后一次编辑于  07-26  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

5 个回答

  • 拾忆
    拾忆
    07-26

    为什么不在每个数据单独设置一个复选框状态属性呢?

    全选的时候遍历下数据,把复选框状态变更下就行了,提交数据的时候再遍历下数据判断哪些是选中的。

    07-26
    赞同
    回复 6
    • 黄皓
      黄皓
      07-26

      只能遍历这一种办法吗?,而且每一列还要新增一个是否选中的状态属性,列表长的时候感觉特别耗费资源😓

      07-26
      回复
    • 拾忆
      拾忆
      07-26
      又不是几千几万条,小程序本身前台能显示的元素也是有上限的,以手机的运算能力来说遍历没什么太大压力。
      07-26
      回复
    • 刘汝佳
      刘汝佳
      07-26
      你可以添加一个参数 a 好比你原来的复选框状态是b1,b2,。。。。 现在的状态是a || b,a为true的时候 状态就是true了,
      07-26
      回复
    • 刘汝佳
      刘汝佳
      07-26回复黄皓

      <checkbox-group bindchange="checkboxChange">

      <label class="checkbox" wx:for="{{items}}">

      <checkbox value="{{item.name}}" checked="{{item.checked||a}}"/>{{item.value}}

      </label>

      </checkbox-group>


      07-26
      回复
    • 黄皓
      黄皓
      07-26回复刘汝佳

      好的,我试试,可能是之前操作dom习惯了,没改过来,因为之前datagrid一次渲染就是500-1000条数据,手机上好像也不可能这么搞,还是要靠搜索。

      07-26
      回复
    查看更多(1)
  • waterfall
    waterfall
    07-26

    没有ID那这些161、162哪来的。。。

    07-26
    赞同
    回复 1
    • 黄皓
      黄皓
      07-26
      161、162这些是为了方便调试显示出来的
      07-26
      回复
  • ~_~
    ~_~
    07-26

    自己写个假的选框

    07-26
    赞同
    回复 1
    • 黄皓
      黄皓
      07-26

      好惨  ╯﹏╰  习惯了js的极度自由,改成每次都要遍历全部数据感觉超级浪费。遍历一次数据,就等于要全部都重新渲染一次,这样不是太浪费资源了吗?难度没有更好一些的办法。。。

      07-26
      回复
  • 烬
    07-26

    你一页显示显示几条?不分页?直接遍历获取就行了

    07-26
    赞同
    回复 3
    • 黄皓
      黄皓
      07-26

      一页大概就20条,但如果不停下拉加载,有可能会非常多,遍历等于所有界面都要重新渲染吧。。。小程序底层还是dom树来的吧,如果能只改变状态,然后获取id列表,应该会省一些资源的吧。

      07-26
      回复
    • 烬
      07-26回复黄皓
      你js for循环获取会影响页面吗?
      07-26
      回复
    • 黄皓
      黄皓
      07-26
      有道理👍
      07-26
      回复
  • 黄皓
    黄皓
    07-26

    自己搞出来了一个办法,用createSelectorQuery,效率也还不错,直接省掉了bindchange事件,从代码简洁度来讲感觉好一些。

    100条,耗时29毫秒,感觉还可以。

    var idlist = [];
    var dt = new Date();
    var ss = wx.createSelectorQuery();
    var res = ss.selectAll(".selectCheckbox");
    res.fields({
        properties: ["checked", 'value']
    }, function(resx) {
        $.log(resx.length)
        for (var x = 0; x < resx.length; x++) {
            var tjson = resx[x];
            $.log(tjson);
            if (tjson.checked === true) {
                idlist.push(tjson.value);
            }
        }
    }).exec(function() {
        $.log(idlist);
        console.log("耗时=>" + (new Date() - dt));
    });
    07-26
    赞同
    回复