Vuetify:复选框在未选中时显示状态已选中,反之亦然

Posted

技术标签:

【中文标题】Vuetify:复选框在未选中时显示状态已选中,反之亦然【英文标题】:Vuetify: checkbox shows status is checked when it is unchecked, and vice versa 【发布时间】:2019-02-28 02:56:33 【问题描述】:

让我把问题简单化一下:

我的 Vue.js 模板中有一个复选框(使用 Vuetify 组件):

<v-checkbox 
   v-model="selected" 
   label="John"
   value="John"
   id ="john" 
   @click.native="checkit">
</v-checkbox> 

checkit()方法代码为:

checkit: function() 
  let elt = document.getElementById('john')
  if(elt.checked) 
    console.log('checked')
   else 
    console.log('unchecked')
  

但我得到相反的结果:当它被选中时,它说它没有被选中,反之亦然。

是什么原因造成的,如何解决?

Codepen demo

【问题讨论】:

【参考方案1】:

您得到的console.log 在选中或取消选中复选框的操作之前被触发。所以这就是发生的事情:

    用户点击复选框 javascript 执行监听器 如果事件没有在任何监听器中取消,它会继续并将复选框设置为选中或未选中。

您可以使用监听change 事件:https://codepen.io/anon/pen/VGOMPB?editors=1011

第二件事是,通过使用document.getElementById('john'),您依赖这里的 DOM 来检查复选框是否被选中。为什么不依赖 selected 属性? DOM 会在所有 JS 执行完毕后更新,以免刷新 DOM 过于频繁。如果要等待 DOM 更新,可以使用 $nextTick 助手:https://codepen.io/anon/pen/BOewpg?editors=1011

checkit: function () 
    this.$nextTick(() => 
        let elt = document.getElementById('john')
        if(elt.checked) 
            console.log('checked')
         else 
            console.log('unchecked')
        
    )

    //this.selected.push('Vuejs')
    //this.selected.push('Paris')

【讨论】:

以上是关于Vuetify:复选框在未选中时显示状态已选中,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

选中复选框时jQuery隐藏div,未选中时显示

当复选框兄弟姐妹更改为选中时显示警报

选中复选框时显示隐藏字段?

在继续之前如何验证复选框是不是被选中?

未选中某些或所有复选框时显示消息

如果选中某些复选框,则 jquery 验证表单输入