在Vue.js中处理Enter键

2o7dmzc5  于 2022-12-04  发布在  Vue.js
关注(0)|答案(8)|浏览(200)

我有一个文本字段和一个按钮。
默认情况下,当有人按下键盘上的Enter键时,此按钮将提交表单。
当有人在文本字段中键入时,我希望捕获每个按下的键。如果该键是@符号,我希望做一些特殊的事情。
如果按下的键是Enter键,我也想做一些特别的事情。后者是给我的挑战。目前,我有这个Fiddle,它包括以下代码:

new Vue({
  el: '#myApp',
  data: {
    emailAddress: '',
    log: ''
  },
  methods: {
    validateEmailAddress: function(e) {
      if (e.keyCode === 13) {
        alert('Enter was pressed');
      } else if (e.keyCode === 50) {
        alert('@ was pressed');
      }      
      this.log += e.key;
    },
    
    postEmailAddress: function() {
      this.log += '\n\nPosting';
    }
});

在我的例子中,如果不提交表单,我似乎就不能按Enter键。然而,我希望至少先触发validateEmailAddress函数,这样我就可以捕获它。但是,这似乎并没有发生。
我做错了什么?

fquxozlt

fquxozlt1#

在vue 2中,您可以使用v-on:keyup.enter捕获enter事件,请检查文档:
https://v2.vuejs.org/v2/guide/events.html#Key-Modifiers
我留下一个 * 非常简单 * 的例子:
第一个
"祝你好运"

puruo6ea

puruo6ea2#

事件修饰符

您可以引用vuej中的事件修饰符来阻止enter键上的表单提交。
在事件处理程序中调用event.preventDefault()event.stopPropagation()是一种非常常见的需求。
尽管我们可以在方法内部轻松地完成这一点,但如果方法能够纯粹地处理数据逻辑而不是必须处理DOM事件细节,那就更好了。
为了解决这个问题,Vue为v-on提供了事件修饰符。

<form v-on:submit.prevent="<method>">
  ...
</form>

正如文档所述,这是e.preventDefault()的语法糖,将停止按Enter键时不需要的表单提交。
Here是一把工作的小提琴。
第一个

ryevplcw

ryevplcw3#

此事件对我有效:

@keyup.enter.native="onEnter".
m3eecexj

m3eecexj4#

对于输入事件处理,可以使用

  1. @keyup.enter
  2. @keyup.13
    13是enter的键码。对于@ key事件,键码是50。因此可以使用@keyup.50
    例如:
<input @keyup.50="atPress()" />
xiozqbni

xiozqbni5#

您在最后一行前忘记了一个'}'(用于关闭“方法{...”)。
以下代码有效:
第一个

jmo0nnb3

jmo0nnb36#

您还可以使用类似下面的代码将事件向下传递到子组件:

<CustomComponent
    @keyup.enter="handleKeyUp"
/>

...

<template>
    <div>
        <input
            type="text"
            v-on="$listeners"
        >
    </div>
</template>

<script>
export default {
    name: 'CustomComponent',

    mounted() {
        console.log('listeners', this.$listeners)
    },
}
</script>

如果您有一个传递组件,并且希望侦听器转到特定的元素上,那么这种方法非常有效。

eimct9ow

eimct9ow7#

缺少方法的右花括号

new Vue({
  el: '#myApp',
  data: {
    emailAddress: '',
    log: ''
  },
  methods: {
    validateEmailAddress: function(e) {
      if (e.keyCode === 13) {
        alert('Enter was pressed');
      } else if (e.keyCode === 50) {
        alert('@ was pressed');
      }      
      this.log += e.key;
    },

    postEmailAddress: function() {
      this.log += '\n\nPosting';
    }
  }//add this closing bracket and everything is fine
});
ocebsuys

ocebsuys8#

这就是您在Vue3中使用Composition API编写它的方式。

<script setup>
function callOnEnter() {
  console.log("Enter key pressed");
}
</script>

<template>
  <input type="text" @keyup.enter="callOnEnter" />
</template>

更多详细信息,请访问:https://vuejs.org/guide/essentials/event-handling.html#key-modifiers

相关问题