vue中shift+enter按键触发事件

Car*_*zar 6 vue-component vuejs2

我正在使用 vue 2.6.x 创建一个类似聊天的文本框,用户可以在其中写入,然后如果他按 Enter 键,则会发送消息,知道我希望能够在shift+enter按下按键时进行换行

这是我的text field

<v-text-field
  @click="answer"
  v-model="text"
  append-icon="send"
  :append-icon-cb="sendMessage"
  label="Write your message..."
  @keyup.native.enter="sendMessage()"
  :multi-line="true"
  :auto-grow="true"
  :rows="1"
  :hide-details="true"
  flat
  solo>
  <v-icon slot="append-icon">send</v-icon>
</v-text-field>
Run Code Online (Sandbox Code Playgroud)

shift + enter仅同时按下按键时如何监听事件?

wob*_*ano 21

这就是我使用精确修饰符prevent.

<template>
  <v-textarea
    v-model="text"
    placeholder="Write a message..."
    outlined
    single-line
    dense
    hide-details
    rows="1"
    auto-grow
    @keydown.enter.exact.prevent="sendMessage"
    @keydown.enter.shift.exact.prevent="text += '\n'"
  >
  </v-textarea>
</template>

<script>
import { defineComponent, ref } from '@vue/composition-api';

export default defineComponent({
  setup() {
    const text = ref('');
    const sendMessage = () => {
      if (!text.value) return;
      // your send message logic
    };

    return {
      text,
      sendMessage,
    };
  },
});
</script>
Run Code Online (Sandbox Code Playgroud)

@keydown.enter.exact.prevent按下 时运行该sendMessage方法enter而不输入新行

@keydown.enter.shift.exact.preventshift + enter按下时添加新行。


小智 6

<v-textarea auto-grow id="message-area"
placeholder="Write message"
    rows="1"
    solo 
    flat
    v-model="message"
    hide-details
    @keyup.enter="sendMessage"
 >
</v-textarea> 

mounted() {
    sendMessage: function (event) {
        if (event.shiftKey===true && event.key === "Enter") {
           console.log("New line added, message not sended")
           return;
       }
       console.log("Message sended")
}
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到 stackoverflow Alexey。请考虑解释你的答案。仅代码答案通常无法帮助其他人理解您的解决方案。 (3认同)

小智 1

mounted() {
  let self = this;
  window.addEventListener("keypress", function(event) {
      if (event.isShiftKeyDown() && event.keyCode === 13) {
        console.log("pressed");
      }
      event.preventDefault();
  });
}
Run Code Online (Sandbox Code Playgroud)

按下按键时,事件被触发

  • 然后还有一个条件:如果同时按下 Shift 键和 keyCode = '13'(对于 Enter 键)

  • 您可以编写自定义函数来代替 console.log("pressed")