在前面的计数器案例中使用了v-on:click监听单击事件。这里在回顾一下:
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
- <title>Documenttitle>
- head>
- <body>
- <div id="app">
- <h2>{{count}}h2>
-
- <button @click="increment">加button>
- <button @click="decrement()">减button>
- div>
- <script>
- const app = new Vue({
- el:"#app",
- data:{
- count:0
- },
- methods: {
- increment(){
- this.count++
- },
- decrement(){
- this.count--
- }
- }
- })
-
- script>
- body>
- html>
使用v-on:click给button绑定监听事件以及回调函数,@是v-on:的语法糖,也就是简写也可以使用@click。方法一般是需要写方法名加上(),在@click中可以省掉,如上述的。
了解了v-on的基本使用,现在需要了解参数传递。
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>Documenttitle>
- head>
- <body>
- <div id="app">
-
- <button @click="btnClick">按钮1button>
- <button @click="btnClick()">按钮2button>
-
- <button @click="btnClick2(123)">按钮3button>
- <button @click="btnClick2()">按钮4button>
- <button @click="btnClick2">按钮5button>
-
- <button @click="btnClick3($event,123)">按钮6button>
- div>
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
- <script>
- const app = new Vue({
- el:"#app",
- methods:{
- btnClick(){
- console.log("点击XXX");
- },
- btnClick2(value){
- console.log(value+"----------");
- },
- btnClick3(event,value){
- console.log(event+"----------"+value);
- }
- }
- })
- script>
- body>
- html>
$event传入事件。按钮4调用btnClick2(value){},此时undefined。按钮5调用时省略了(),会自动传入原生event事件,如果我们需要event对象还需要传入其他参数,可以使用$event对象。
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>v-on的修饰符title>
- <style>
- .div {
- height:80px;
- background:#f00;
- }
- style>
- head>
- <body>
- <div id="app">
-
- <div @click="divClick">
- <button @click.stop="btnClick">按钮1button>
- div>
-
- <form action="www.baidu.com">
- <button type="submit" @click.prevent="submitClick">提交button>
- form>
-
- <form @submit.prevent=''>
- 账号<input type="text" name="user"/>
- 密码<input type="text" name="password" @keyup.enter="submit"/>
- <input type="submit" value="登录"/>
- form>
-
- <button @click.once="showInfo">点我提示信息button>
-
- <div class="box1" @click.capture="show(111)">
- div1外面
- <div class="box2" @click="show(222)">
- div2里面
- div>
- div>
-
- <div class="div" @click.self="showself">
- <button @click="showself">点我button>
- div>
-
- div>
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
- <script>
- const app = new Vue({
- el:"#app",
- methods:{
- btnClick(){
- console.log("点击button");
- },
- divClick(){
- console.log("点击div");
- },
- submitClcik(){
- console.log("提交被阻止了")
- },
- submit(){
- console.log("keyup点击")
- },
- showInfo(){
- alert('web学习真有趣')
- },
- show(msg){
- console.log(msg)
- },
- showself(e){
- console.log(e.target);
- },
- }
- })
- script>
- body>
- html>
.stop的使用,btn的click事件不会传播,不会冒泡到上层,调用event.stopPropagation()。.prevent 调用event.preeventDefault阻止默认行为。.enter监听键盘事件;once 事件只触发一次(常用) 5.capture 使用事件的捕获模式;
6.self 只有event.target是当前操作的元素时才触发事件;
7.passive 事件的默认行为立即执行,无需等待事件回调执行完毕;
1.Vue中常用的按键别名: 回车 => enter
删除 => delete (捕获“删除”和“退格”键)
退出 => esc
空格 => space
换行 => tab (特殊,必须配合keydown去使用)
上 => up
下 => down
左 => left
右 => right
2.Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)
3.系统修饰键(用法特殊):ctrl、alt、shift、meta
(1).配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。
(2).配合keydown使用:正常触发事件。
4.也可以使用keyCode去指定具体的按键(不推荐)
5.Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键别名
- html>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>键盘事件title>
-
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
- head>
- <body>
-
- <div id="app">
- <h2>{{msg}}h2>
- <input type="text" placeholder="按下回车提示输入" @keyup.caps-lock="show">
- div>
- body>
-
- <script type="text/javascript">
- Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
- Vue.config.keyCodes.huiche = 13 //定义了一个别名按键
-
- new Vue({
- el:'#app',
- data:{
- msg:'web前端'
- },
- methods: {
- show(e){
- // console.log(e.key,e.keyCode)CapsLock这样的,应该使用@keyup.caps-lock="show"
- console.log(e.target.value)
- }
- },
- })
- script>
- html>
也可以使用keyCode去指定具体的按键(不推荐)
- html>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>键盘事件title>
-
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
- head>
- <body>
-
- <div id="app">
- <h2>{{msg}}h2>
- <input type="text" placeholder="按下回车提示输入" @keyup.13="show">
- div>
- body>
-
- <script type="text/javascript">
- Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
- Vue.config.keyCodes.huiche = 13 //定义了一个别名按键
-
- new Vue({
- el:'#app',
- data:{
- msg:'web前端'
- },
- methods: {
- show(e){
- // console.log(e.key,e.keyCode)CapsLock这样的,应该使用@keyup.caps-lock="show"
- console.log(e.target.value)
- }
- },
- })
- script>
- html>
另外一种 失去登录文本框焦点时 可以使用
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>v-on的修饰符title>
- head>
- <body>
- <div id="app">
-
- <form @submit.prevent=''>
- 账号<input type="text" name="user"/>
- 密码<input type="text" name="password" />
- <input type="submit" value="登录" @keyup.enter="submit"/>
- form>
-
- div>
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js">script>
- <script>
- const app = new Vue({
- el:"#app",
- methods:{
- submit(){
- console.log("keyup点击")
- }
- },
- created() {
- let that = this;
- document.onkeydown =function(e){
- e = window.event || e;
- if(e.code=='Enter'||e.code=='enter'){//验证在登录界面和按得键是回车键enter
- that.submit();//登录函数
- }
- }
- }
- })
- script>
- body>
- html>