javascript - v-on:click事件怎么改变v-model绑定的值?
伊谢尔伦
伊谢尔伦 2017-04-11 12:29:26
[JavaScript讨论组]

表的input[type='checkbox']框全部绑定到了对应数组的active上,点击上面全选的时候怎么让所有的checkbox的active值变为true/false?

这里是我写的全选的代码,但是这样的话是改变整个列表的内容,如果我加入了筛选filterBy,在筛选框输入内容后列表会改变,但是这时再点击全选依然改变的是所有结果的active,而不是当前筛选出来的结果的active

        checkAll:function(){
            if ($('#selectAll').is(':checked')) {
                $("#result tr>td input").prop('checked', true);
                for(var i in goodsDetail.$data.goodsMsg){
                    goodsDetail.$data.goodsMsg[i].active = true;
                }
            } else {
                $("#result tr>td input").prop('checked', false);
                for(var i in goodsDetail.$data.goodsMsg){
                    goodsDetail.$data.goodsMsg[i].active = false;
                }
            }
            var length = $('input:checkbox[name=checkBox]:checked').length;
            $(".centerinfo").text("已选中"+length+"条数据");
        }
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
PHP中文网

为什么你会这么使用vue?你不应该去操作dom而应该去操作数据。你应该去修改数据里的选中状态而不是去手动的修改dom的实际选中状态。

ringa_lee

给每个item一个isChecked的布尔值来表示当前选项是否被选中,checkAll去操作数据的这个属性就可以了。

阿神

每一行都设置v-bind:class="{'active': isChecked}",全选时再去循环每行的isChecked设置成true

怪我咯

最近的项目需要用到全选,写了一个全选的指令,你可以参考下

export default {
'check-all': {
twoWay: true,
        params: ['checkData'],
        bind() {
/**
             * 如果所有的列表的checked属性都为true,则选中全选框,否则不选中全选框
             */
            this.vm.$watch(this.params.checkData, (checkData) => {
if (checkData.every((item) => item.checked)) {
this.set(true);
                } else {
this.set(false);
                }
            }, { deep: true });
        },
        update(checkAll) {
/**
             * 如果全选框被选中,则将列表的所有checked属性转为true,否则转为false
             */
            if (checkAll) {
this.vm[this.params.checkData].forEach((item) => {
                    item.checked = true;
                });
            } else {
this.vm[this.params.checkData].forEach((item) => {
                    item.checked = false;
                });
            }
        },
    },
};

调用

<input type="checkbox" v-model="checkAll" v-check-all="checkAll" check-data="checkData">
<ul>
    <li v-for="item in checkData">
        <input type="checkbox" v-model="item.checked">
        {{item.text}}
</li>
</ul>

知乎上也有类似的问题,也有其他解决方案,你可以参考下:
https://www.zhihu.com/questio...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号