美文网首页
动态监听可编辑DIV内容变化

动态监听可编辑DIV内容变化

作者: kurumi_feng | 来源:发表于2022-11-19 18:09 被阅读0次

    vue版本:2.6.14
    ElementUI版本:^2.15.6

    场景描述:业务中需要在输入框中显示html,所以采用了可编辑DIV,但是需要监听DIV中内容变化来设置提交按钮的disabled状态。

    方法来源:https://www.codenong.com/js848bda517abf/
    解决方法:

    <template>
      <div>
        编辑区:
        <!-- contenteditable使div内容可编辑 -->
        <div ref="entry" class="entry" contenteditable="true" v-html="data" @input="handleInputEvent" @blur="handleBlurEvent"></div>
        <el-button :disabled="isSubmitDisabled">提交</el-button>
      </div>
    </template>
    <script>
      export default {
        data () {
          return {
            data: '',
            dataCopy: '',
            isSubmitDisabled: true,
          }
        },
        methods: {
           handleInputEvent(e) {
            // 此时 dataCopy 获取的内容即为可编辑DIV中动态输入的值
            // 注意:不能将 dataCopy 赋值给可编辑输入框绑定的值 data,否则重新赋值会使输入框的光标跑到最前面!!!
            this.dataCopy = this.$refs.entry.innerHTML;
            if(this.dataCopy !== '') {
              this.isSubmitDisabled = false;
            } else {
              this.isSubmitDisabled = false;
            }
          },
          // 当光标失去焦点(也就是点击提交按钮的时候)给data赋值最后输入结果即可
          handleBlurEvent(e) {
            this.data = e.target.innerHTML;
          }
        },
      }
    </script>
    <style lang="less" scoped>
    // 改变可编辑div聚焦时的边框颜色
    .entry:focus {
      outline: none;
      border: 1px solid #65a0fa;
    }
    </style>
    

    注意点就是:动态获取的div的innerHTML,只是用来判断是否输入了内容,
    不能将 data 赋值给可编辑输入框绑定的值,否则重新赋值会使输入框的光标跑到最前面!!!

    相关文章

      网友评论

          本文标题:动态监听可编辑DIV内容变化

          本文链接:https://www.haomeiwen.com/subject/yhgbxdtx.html