動態(tài)監(jiān)聽可編輯DIV內(nèi)容變化

vue版本:2.6.14
ElementUI版本:^2.15.6

場景描述:業(yè)務(wù)中需要在輸入框中顯示html,所以采用了可編輯DIV,但是需要監(jiān)聽DIV中內(nèi)容變化來設(shè)置提交按鈕的disabled狀態(tài)。

方法來源:https://www.codenong.com/js848bda517abf/
解決方法:

<template>
  <div>
    編輯區(qū):
    <!-- contenteditable使div內(nèi)容可編輯 -->
    <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 獲取的內(nèi)容即為可編輯DIV中動態(tài)輸入的值
        // 注意:不能將 dataCopy 賦值給可編輯輸入框綁定的值 data,否則重新賦值會使輸入框的光標(biāo)跑到最前面?。。?        this.dataCopy = this.$refs.entry.innerHTML;
        if(this.dataCopy !== '') {
          this.isSubmitDisabled = false;
        } else {
          this.isSubmitDisabled = false;
        }
      },
      // 當(dāng)光標(biāo)失去焦點(也就是點擊提交按鈕的時候)給data賦值最后輸入結(jié)果即可
      handleBlurEvent(e) {
        this.data = e.target.innerHTML;
      }
    },
  }
</script>
<style lang="less" scoped>
// 改變可編輯div聚焦時的邊框顏色
.entry:focus {
  outline: none;
  border: 1px solid #65a0fa;
}
</style>

注意點就是:動態(tài)獲取的div的innerHTML,只是用來判斷是否輸入了內(nèi)容,
不能將 data 賦值給可編輯輸入框綁定的值,否則重新賦值會使輸入框的光標(biāo)跑到最前面?。。?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容