use*_*554 50 javascript vue.js
我正在学习Vue.js. 在我的Vue中,我有一个文本字段和一个按钮.默认情况下,当有人按下键盘上的Enter键时,此按钮会提交表单.当有人在文本字段中输入内容时,我想捕获每个按下的键.如果键是'@'符号,我想做一些特别的事情.如果按下的键是"Enter"键,我也想做一些特别的事情.后者是给我挑战的那个.目前,我有这个小提琴,其中包括以下代码:
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';
}
});
Run Code Online (Sandbox Code Playgroud)
在我的例子中,如果没有提交表单,我似乎无法按"Enter"键.然而,我希望这个validateEmailAddress功能至少先开火,这样才能捕获它.但是,这似乎并没有发生.我究竟做错了什么?
fit*_*rec 52
在vue 2中,您可以通过v-on:keyup.enter检查文档来捕获输入事件:
我留下一个非常简单的例子:
var vm = new Vue({
el: '#app',
data: {msg: ''},
methods: {
onEnter: function() {
this.msg = 'on enter event';
}
}
});Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">
<input v-on:keyup.enter="onEnter" />
<h1>{{ msg }}</h1>
</div>Run Code Online (Sandbox Code Playgroud)
祝好运
Amr*_*pal 33
您可以在vuejs中引用事件修饰符以防止在enter键上提交表单.
调用
event.preventDefault()或event.stopPropagation()在事件处理程序内部是非常常见的需求.虽然我们可以在方法中轻松地做到这一点,但如果方法纯粹是关于数据逻辑而不是必须处理DOM事件细节会更好.
为了解决这个问题,Vue提供了事件修饰符
v-on.回想一下,修饰符是由点表示的指令后缀.
<form v-on:submit.prevent="<method>">
...
</form>
Run Code Online (Sandbox Code Playgroud)
正如文档所述,这是语法糖,e.preventDefault()并将在按下回车键时停止不需要的表单提交.
这是一个工作小提琴.
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';
},
noop () {
// do nothing ?
}
}
})Run Code Online (Sandbox Code Playgroud)
html, body, #editor {
margin: 0;
height: 100%;
color: #333;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue@2.2.4/dist/vue.js"></script>
<div id="myApp" style="padding:2rem; background-color:#fff;">
<form v-on:submit.prevent="noop">
<input type="text" v-model="emailAddress" v-on:keyup="validateEmailAddress" />
<button type="button" v-on:click="postEmailAddress" >Subscribe</button>
<br /><br />
<textarea v-model="log" rows="4"></textarea>
</form>
</div>Run Code Online (Sandbox Code Playgroud)
Hap*_*wan 21
你在最后一行之前忘了'}'(关闭"方法{...").
此代码有效:
Vue.config.keyCodes.atsign = 50;
new Vue({
el: '#myApp',
data: {
emailAddress: '',
log: ''
},
methods: {
onEnterClick: function() {
alert('Enter was pressed');
},
onAtSignClick: function() {
alert('@ was pressed');
},
postEmailAddress: function() {
this.log += '\n\nPosting';
}
}
})Run Code Online (Sandbox Code Playgroud)
html, body, #editor {
margin: 0;
height: 100%;
color: #333;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://vuejs.org/js/vue.min.js"></script>
<div id="myApp" style="padding:2rem; background-color:#fff;">
<input type="text" v-model="emailAddress" v-on:keyup.enter="onEnterClick" v-on:keyup.atsign="onAtSignClick" />
<button type="button" v-on:click="postEmailAddress" >Subscribe</button>
<br /><br />
<textarea v-model="log" rows="4"></textarea>
</div>Run Code Online (Sandbox Code Playgroud)
Rah*_* TP 19
对于输入事件处理,您可以使用
@keyup.enter 或者@keyup.1313是回车的键码。对于@key 事件,keycode 是 50。所以你可以使用@keyup.50.
例如:
<input @keyup.50="atPress()" />
Run Code Online (Sandbox Code Playgroud)
agm*_*984 17
您还可以使用如下方式将事件传递到子组件中:
<CustomComponent
@keyup.enter="handleKeyUp"
/>
Run Code Online (Sandbox Code Playgroud)
...
<template>
<div>
<input
type="text"
v-on="$listeners"
>
</div>
</template>
<script>
export default {
name: 'CustomComponent',
mounted() {
console.log('listeners', this.$listeners)
},
}
</script>
Run Code Online (Sandbox Code Playgroud)
如果您有一个传递组件并希望侦听器转到特定元素,那么这种方法很有效。
视图3
\n在 Vue 3 中,如果您想监听输入中的事件输入,则此代码有效:
\n<input @keyup.enter="onPressEnter" />\nRun Code Online (Sandbox Code Playgroud)\n或者,您可能希望事件在按下按键时触发,而不是在释放\xe2\x80\x99s 时触发:
\n<input @keydown.enter="onPressEnter" />\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
79530 次 |
| 最近记录: |