我有一个文本字段和一个按钮。
默认情况下,当有人按下键盘上的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
函数,这样我就可以捕获它。但是,这似乎并没有发生。
我做错了什么?
8条答案
按热度按时间fquxozlt1#
在vue 2中,您可以使用
v-on:keyup.enter
捕获enter事件,请检查文档:https://v2.vuejs.org/v2/guide/events.html#Key-Modifiers
我留下一个 * 非常简单 * 的例子:
第一个
"祝你好运"
puruo6ea2#
事件修饰符
您可以引用vuej中的事件修饰符来阻止
enter
键上的表单提交。在事件处理程序中调用
event.preventDefault()
或event.stopPropagation()
是一种非常常见的需求。尽管我们可以在方法内部轻松地完成这一点,但如果方法能够纯粹地处理数据逻辑而不是必须处理DOM事件细节,那就更好了。
为了解决这个问题,Vue为
v-on
提供了事件修饰符。正如文档所述,这是
e.preventDefault()
的语法糖,将停止按Enter键时不需要的表单提交。Here是一把工作的小提琴。
第一个
ryevplcw3#
此事件对我有效:
m3eecexj4#
对于输入事件处理,可以使用
@keyup.enter
或@keyup.13
13是enter的键码。对于@ key事件,键码是50。因此可以使用
@keyup.50
。例如:
xiozqbni5#
您在最后一行前忘记了一个'}'(用于关闭“方法{...”)。
以下代码有效:
第一个
jmo0nnb36#
您还可以使用类似下面的代码将事件向下传递到子组件:
...
如果您有一个传递组件,并且希望侦听器转到特定的元素上,那么这种方法非常有效。
eimct9ow7#
缺少方法的右花括号
ocebsuys8#
这就是您在Vue3中使用Composition API编写它的方式。
更多详细信息,请访问:https://vuejs.org/guide/essentials/event-handling.html#key-modifiers