当前位置:   article > 正文

el-input textarea输入框 字体英文输入问题、回车提交、ctrl+enter换行等问题_el-input回车键提交

el-input回车键提交

需求一:textarea输入框 回车改发送(中文下字母输入时,回车直接发送)
关键点:两个方法@keydown.enter.native @input; 以及延时获取内容时机

<el-input
            ref="inputDiv"
            class="textarea"
            type="textarea"
            autosize
            placeholder="请输入内容"
            v-model="question"
            :rows="1"
            @input="inputWay"
            @keydown.enter.native="carriageReturn($event)">
          </el-input>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
	inputWay(val) {
	  this.question = val
	},
	 // 回车不换行 变成发送消息
    carriageReturn() {
      let e = window.event || arguments[0];
      // 英文下|中文下: 13 Enter Enter
      // 中文下有文字没进入输入框情况是:299 Enter Enter
      // console.log(e);
      if (e.key == "Enter" || e.code == "Enter" || e.keyCode == 13) {
         e.returnValue = false;
         this.sureSendWay()
         return false;
      }
    },
    sureSendWay() {
      var that = this
      setTimeout(() => { // 就是为了修改js执行的时机 及微任务宏任务的转换
      	// 可以写发送事件了
      }, 0)
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

需求二:textarea输入框 回车改发送(中文下字母输入时,回车时字母进入输入框,再次点击再发送);ctrl+enter设置换行

关键点:键盘的输入状态e.keyCode、e.metaKey

<el-input
            ref="inputDiv"
            class="textarea"
            type="textarea"
            autosize
            placeholder="请输入内容"
            v-model="question"
            :rows="1"
            @keydown.enter.native="carriageReturn($event)">
          </el-input>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
 // 回车不换行 变成发送消息
    carriageReturn() {
      let e = window.event || arguments[0];
      // 英文下|中文下: 13 Enter Enter
      // 中文下有文字没进入输入框情况是:299 Enter Enter
       if (e.key == "Enter" && e.code == "Enter" && e.keyCode == 13) {
        if (!e.metaKey) { // e.metaKey == true证明是ctrl+enter
          e.returnValue = false;
          this.sureSendWay()
          return false;
        } else {
          this.question = this.question + '\n';
        }
        
      }
    },
    sureSendWay() {
      var that = this      	
      // 可以写发送事件了
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

-----------------------------------------------------2023/6/26更新
需求优化:换行可以在文字中间换行,而不是只能在最后换行
只需把上面的 this.question = this.question + '\n';换成下面的代码

let dIndex = e.srcElement.selectionStart // 光标所在位置
that.question = that.question.slice(0, dIndex) + '\n' + that.question.slice(dIndex)
that.$nextTick(() => { // 设置光标位置
    e.srcElement.selectionStart = dIndex + 1
    e.srcElement.selectionEnd = dIndex + 1
    console.log(e.srcElement.selectionStart);
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

小伙伴,有帮助的话记得点赞哦~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/492685
推荐阅读
相关标签
  

闽ICP备14008679号