解决el-checkbox点击文字也会选中

这篇具有很好参考价值的文章主要介绍了解决el-checkbox点击文字也会选中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近要做一个 多选框嵌套下拉框的一个功能,在点击下拉框时,多选框一直会被选中或者取消,这里做一下解决记录
首先展示一下要做的功能
解决el-checkbox点击文字也会选中
出现原因:
el 的checkbox的组件整个是由lable包裹的,所以重写el-checkbox就可以了
原编码:
解决el-checkbox点击文字也会选中
解决:
这里用div或者span都是可以的,div会处理成 line-block

<template>
  <div
    :id="id"
    class="el-checkbox"
    :class="[
      border && checkboxSize ? 'el-checkbox--' + checkboxSize : '',
      { 'is-disabled': isDisabled },
      { 'is-bordered': border },
      { 'is-checked': isChecked }
    ]"
  >
    <label>
      <span
        class="el-checkbox__input"
        :class="{
          'is-disabled': isDisabled,
          'is-checked': isChecked,
          'is-indeterminate': indeterminate,
          'is-focus': focus
        }"
        :tabindex="indeterminate ? 0 : false"
        :role="indeterminate ? 'checkbox' : false"
        :aria-checked="indeterminate ? 'mixed' : false"
      >
        <span class="el-checkbox__inner" />
        <input
          v-if="trueLabel || falseLabel"
          v-model="model"
          class="el-checkbox__original"
          type="checkbox"
          :aria-hidden="indeterminate ? 'true' : 'false'"
          :name="name"
          :disabled="isDisabled"
          :true-value="trueLabel"
          :false-value="falseLabel"
          @change="handleChange"
          @focus="focus = true"
          @blur="focus = false"
        >
        <input
          v-else
          v-model="model"
          class="el-checkbox__original"
          type="checkbox"
          :aria-hidden="indeterminate ? 'true' : 'false'"
          :disabled="isDisabled"
          :value="label"
          :name="name"
          @change="handleChange"
          @focus="focus = true"
          @blur="focus = false"
        >
      </span>
    </label>
    <span v-if="$slots.default || label" class="el-checkbox__label">
      <slot />
      <template v-if="!$slots.default">{{ label }}</template>
    </span>
  </div>
</template>
<script>
import Emitter from 'element-ui/src/mixins/emitter'

export default {
  name: 'RCheckbox',

  mixins: [Emitter],

  inject: {
    elForm: {
      default: ''
    },
    elFormItem: {
      default: ''
    }
  },

  componentName: 'RCheckbox',

  props: {
    value: {},
    label: {},
    indeterminate: Boolean,
    disabled: Boolean,
    checked: Boolean,
    name: String,
    trueLabel: [String, Number],
    falseLabel: [String, Number],
    id: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/
    controls: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/
    border: Boolean,
    size: String
  },

  data() {
    return {
      selfModel: false,
      focus: false,
      isLimitExceeded: false
    }
  },

  computed: {
    model: {
      get() {
        return this.isGroup
          ? this.store : this.value !== undefined
            ? this.value : this.selfModel
      },

      set(val) {
        if (this.isGroup) {
          this.isLimitExceeded = false;
          (this._checkboxGroup.min !== undefined &&
            val.length < this._checkboxGroup.min &&
            (this.isLimitExceeded = true));

          (this._checkboxGroup.max !== undefined &&
            val.length > this._checkboxGroup.max &&
            (this.isLimitExceeded = true))

          this.isLimitExceeded === false &&
          this.dispatch('ElCheckboxGroup', 'input', [val])
        } else {
          this.$emit('input', val)
          this.selfModel = val
        }
      }
    },

    isChecked() {
      if ({}.toString.call(this.model) === '[object Boolean]') {
        return this.model
      } else if (Array.isArray(this.model)) {
        return this.model.indexOf(this.label) > -1
      } else if (this.model !== null && this.model !== undefined) {
        return this.model === this.trueLabel
      }
    },

    isGroup() {
      let parent = this.$parent
      while (parent) {
        if (parent.$options.componentName !== 'ElCheckboxGroup') {
          parent = parent.$parent
        } else {
          this._checkboxGroup = parent
          return true
        }
      }
      return false
    },

    store() {
      return this._checkboxGroup ? this._checkboxGroup.value : this.value
    },

    /* used to make the isDisabled judgment under max/min props */
    isLimitDisabled() {
      const { max, min } = this._checkboxGroup
      return !!(max || min) &&
        (this.model.length >= max && !this.isChecked) ||
        (this.model.length <= min && this.isChecked)
    },

    isDisabled() {
      return this.isGroup
        ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled
        : this.disabled || (this.elForm || {}).disabled
    },

    _elFormItemSize() {
      return (this.elFormItem || {}).elFormItemSize
    },

    checkboxSize() {
      const temCheckboxSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size
      return this.isGroup
        ? this._checkboxGroup.checkboxGroupSize || temCheckboxSize
        : temCheckboxSize
    }
  },

  watch: {
    value(value) {
      this.dispatch('ElFormItem', 'el.form.change', value)
    }
  },

  created() {
    this.checked && this.addToStore()
  },
  mounted() { // 为indeterminate元素 添加aria-controls 属性
    if (this.indeterminate) {
      this.$el.setAttribute('aria-controls', this.controls)
    }
  },

  methods: {
    addToStore() {
      if (
        Array.isArray(this.model) &&
        this.model.indexOf(this.label) === -1
      ) {
        this.model.push(this.label)
      } else {
        this.model = this.trueLabel || true
      }
    },
    handleChange(ev) {
      if (this.isLimitExceeded) return
      let value
      if (ev.target.checked) {
        value = this.trueLabel === undefined ? true : this.trueLabel
      } else {
        value = this.falseLabel === undefined ? false : this.falseLabel
      }
      this.$emit('change', value, ev)
      this.$nextTick(() => {
        if (this.isGroup) {
          this.dispatch('ElCheckboxGroup', 'change', [this._checkboxGroup.value])
        }
      })
    }
  }
}
</script>

引入:

import RCheckbox from '@/rewrite/r-checkbox.vue'

解决el-checkbox点击文字也会选中文章来源地址https://www.toymoban.com/news/detail-445654.html

到了这里,关于解决el-checkbox点击文字也会选中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element-ui el-tree 设置指定级别节点显示复选框el-checkbox

            /deep/ .el-tree {         padding-top: 15px;         padding-left: 10px;         // 不可全选样式         .el-tree-node {           .is-leaf + .el-checkbox .el-checkbox__inner {             display: inline-block;           }           .el-checkbox .el-checkbox__inner {             display: none;    

    2023年04月08日
    浏览(38)
  • 开发需求15-使用el-checkbox组件实现el-tree组件的父子关联关系(非全选/全不选)

    需求描述: 大家都知道el-tree可以很明显的通过选中来体现上下节点的父子选中状态,那么如果要求把后端把el-tree的数据结构,通过一个展开的list返回给你,使用el-checkbox组件渲染每一个节点,同时要求选中某一个节点,同时可以选中其父节点和子节点;取消也是一样。 思路

    2024年04月17日
    浏览(43)
  • 【element-ui】使用el-checkbox完成el-table表格数据的全选操作

    需求:表格有一列为勾选框列,表格下面有单独的按钮本页勾选和全部勾选,跨页状态可以保存回显,如下图所示: 思路:使用一个数组[]存储每一页是否全选的状态,再使用{}来存储数据的所有选中状态,其中key为对应的页码,value为每一页的选中数据【核心❗】 1、el-tab

    2024年02月11日
    浏览(37)
  • 基于elementUI封装的带复选框el-checkbox的下拉多选el-select组件

    组件:MultipleSelect.vue 使用:index.vue 多选框多选不换行

    2024年01月22日
    浏览(44)
  • css 禁止多次点击导致的选中了目标div的文字

    像下面这样的情况,就可以用这种方法避免掉 禁止多次点击,导致的,选中了目标div的文字 或者 禁止多次点击,导致,html结构被选中显示出来

    2024年02月17日
    浏览(29)
  • 解决elementUI中使用checkbox无法选中的问题

    事情的开始是这样的,有一个属性是isCheck,后端是没有返回这个字段的,但是前端需要将这个属性绑定到el-checkbox上去,但是前端采用循环的方式去生成el-checkbox不行。isCheck每个都有,但是就是无法选中,原因是缺少get和set方法。  原先的写法 上面的写法是不行的。 解决的

    2024年01月22日
    浏览(33)
  • elementUI点击el-card选中变色,且点击别的空白处不变色

    1. script的data中添加属性: 2.template中添加el-card元素:  @click.native调用原生click方法。 @click.native是在vue中,避免vue父模块调用成了vue成子模块中的 this.emit(\\\'click\\\', value) 的方法,而不是我们想调用的原生click方法。(具体查看“@”在vue标签中的应用) 当点击某元素时,selected

    2024年02月02日
    浏览(28)
  • ElementUI中el-tree获取每个节点点击的选中状态

    有时候需要获取el-tree每个节点的点击状态,可以通过以下方式,其中isCheck类型为布尔值 1.绑定@check事件,我这里是getCurrentNode,函数名自己随便写 2.绑定ref

    2024年02月11日
    浏览(36)
  • 完美解决微信小程序使用复选框van-checkbox无法选中

    由于小程序使用了vant-ui框架,导致checkbox点击无法选中问题   记得定义 checked 默认值   解决办法 : 添加onChange事件,给 checked 做赋值操作。 可以打印看看console.log(e) 选中效果: 取消选中效果:    

    2024年02月12日
    浏览(60)
  • element ui多选框(Checkbox 多选框、Select多选框)编辑时无法选中的解决办法

     在上面添加变更事件,然后变更事件中添加this.$forceUpdate();  强制渲染多选框的样式即可 注意: 多选框需要传数组,字符串无法正常渲染,因此表单初始化绑定的v-model需要初始化为空数组[],而编辑页面传值时如果是字符串,需要转数组:         重点就是: this.$forceUpda

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包