v-on的使用

v-on的基本使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<div @click="change()">点击</div>  
			<input @input="changeinput" />
		</div>
		<script>
			const vm = new Vue({
				el:'#app',
				data(){
					return {
						
					}
				},
				methods:{
					change(){
						console.log('1111');
					},
					changeinput(){
						console.log('222');
					}
				}
				
			})
		</script>
	</body>
</html>

v-on的参数传递

  1. 事件没传参,可以省略()
  2. 事件调用方法传参了,写函数时候省略了小括号,但是函数本身是需要传递一个参数的,这个参数就是原生事件event参数传递进去
  3. 如果同时需要传入某个参数,同时需要event是,可以通过$event传入事件。

按钮4调用btnClick2(value){},此时undefined。按钮5调用时省略了(),会自动传入原生event事件,如果我们需要event对象还需要传入其他参数,可以使用$event对象。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<!-- 事件没传参 -->
			<button @click="btnClick">按钮1</button>
			<button @click="btnClick()">按钮2</button>

			<!-- 事件传参 -->
			<button @click="btnClick(123)">按钮3</button>
			<button @click="btnClick()">按钮4</button>
			
			<!-- 注意
			如果我只要传递e事件 那么可以不写参数,当然也可以写一个参数叫$event
			<button @click="btnClick">按钮5</button>
            <button @click="btnClick($event)">按钮5</button> -->

			<!-- 事件传多个参 -->
           <!--  如果我要传递多个参数  那么既要写参数,也要写$event,方法中用e和形参进行接收
			<button @click="btnClick($event,123)">按钮6</button> -->

		</div>
		<script>
			const vm = new Vue({
				el: '#app',
				data() {
					return {

					}
				},
				methods: {
					/* btnClick() {
						console.log("点击XXX");
					}, */

					/* 	btnClick(val) {
							console.log(`点击了${val}`);
						} */

					/* btnClick(e) {
						console.log(e);
					} */
					
					btnClick(e,val) {
						console.log(e+'-----'+val);
					} 
				}

			})
		</script>
	</body>
</html>

v-on的事件修饰词

  1. .stop的使用,btn的click事件不会传播,不会冒泡到上层,调用event.stopPropagation()
  2. .prevent 调用event.preeventDefault阻止默认行为。
  3. .enter监听键盘事件;
  4. 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.自定义键名 = 键码,可以去定制按键别名
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<style>
			.div {
				width: 200px;
				height: 100px;
				background: #f00;
				overflow: scroll;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<!--1. .stop的使用,btn的click事件不会传播,不会冒泡到上层,调用event.stopPropagation() 常用-->
			<div @click="divClick" class="div">
           	 <button type="button" @click.stop="btnClick">点击</button>
           </div>

			<!-- 2. .prevent 调用event.preventDefault阻止默认行为  常用-->
			<a href="http://www.baidu.com" @click.prevent="change">去百度</a>


			<!--3. 修饰符可以串联 常用-->
			<div @click="divClick" class="div">
					<a href="http://www.baidu.com" @click.stop.prevent="change2">去百度</a>
			</div>

			<!-- 4. 添加事件监听器时使用事件捕获模式 不常用-->
			<!-- <div class="box1" @click.capture="show(111)">
				div1外面
				<div class="box2" @click="show(222)">
					div2里面
				</div>
			</div> -->


			<!-- 5.   只当在 event.target 是当前元素自身时触发处理函数  不常用 -->
			<!-- <div class="div" @click.self.prevent="showself">
				<button @click.self.prevent="showself">点我</button>
			</div> -->

			<!-- 6.   点击事件将只会触发一次 不常用-->
			<!-- <a @click.once="doThis">点击触发</a> -->

			<!--   7. .passive 修饰符尤其能够提升移动端的性能。不常用 -->
			<!-- <div class="div" @wheel.passive="onScroll">
				滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发
			</div> -->

			<!-- <div @scroll="onScroll" class="div">滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发滚动事件的默认行为 (即滚动行为) 将会立即触发</div> -->
		</div>
		<script>
			const vm = new Vue({
				el: '#app',
				data() {
					return {

					}
				},
				methods: {
					divClick() {
						console.log('点击了div');
					},
					btnClick() {
						console.log('点击了btn');
					},
					change() {
						console.log('阻止了默认行为');
					},
					change2() {
						console.log('阻止了默认行为也阻止了冒泡');
					},
					show(msg) {
						console.log(msg);
					},
					showself() {
						console.log('我是点击自身才触发');
					},
					doThis() {
						console.log('点击了a');
					},
                    onScroll(){
						for(let i = 0;i<5000;i++){
							console.log('@');
						}
						console.log('333333');
					}
					

					/* onScroll(){
						for (let i = 0; i < 10000; i++) {
							console.log('@');
						}
						console.log('333333');
					} */
				}

			})
		</script>
	</body>
</html>

v-on的按键修饰符

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<form @submit.prevent='' action="psy.jsp">
				账号<input type="text" name="user" />
				<!-- 	密码<input type="text" name="password" @keyup.enter="submit" /> 常用-->
				<!-- 密码<input type="text" name="password" @keyup.13="submit" /> 不常用 不推荐-->
				密码<input type="text" name="password" @keyup.huiche="submit" /><!-- 不常用 不推荐 -->
				<input type="submit" value="登录" />
			</form>
		</div>
		<script>
			Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
			Vue.config.keyCodes.huiche = 13//不常用 不推荐
			const vm = new Vue({
				el: '#app',
				data() {
					return {

					}
				},
				methods: {
					submit() {
						console.log('keyup点击');
					}
				}

			})
		</script>
	</body>
</html>

 

 失去焦点时登录

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<form @submit.prevent=''>
				账号<input type="text" name="user" />
				密码<input type="text" name="password"  @keyup.enter="submit" />
				<input type="submit" value="登录" @keyup.enter="submit" />
			</form>

		</div>
		<script>
			const vm = new Vue({
				el: '#app',
				data() {
					return {
                     
					}
				},
				methods:{
					submit(){
						console.log('keyup点了');
					}
				},
				created() {//生命周期
					document.onkeydown = (e)=>{
						 e = window.event || e;
						 console.log(e);
						 if(e.code == 'Enter'||e.code=='enter'){
							 this.submit()
						 }
					}
				}

			})
		</script>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值