Vue.js 第十一节:表单输入绑定 复现

表单输入绑定

基础语法

可以用v-model指令在表单〈input〉、〈Textarea〉及〈select〉元素上创建双向数据绑定,它会根据控件类型自动选取正确的方法来更新元素,尽管有些神奇,但v-model本质上不过是语法糖。它负责监听用户用户的输入事件以及更新数据,并对一些极端场景进行特殊处理。

  • text和textarea元素使用value属性和input事件双向绑定:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script type='text/javascript' src='vue.js'></script>
		<title></title>
	</head>
	<body>
		<div id='app'>
			<input v-model='message' placeholder="edit me">
			<p>Message is: {{message}} </p>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el: "#app",
				data: {
					message:''
				}
			})
		</script>
	</body>
</html>

Input输入内容直接更新在{{message}}的值里
在这里插入图片描述
多行文本框也是同理:

<html>

	<head>
		<meta charset="utf-8">
		<script type='text/javascript' src='vue.js'></script>
		<title></title>
	</head>
	<body>
		<div id='app'>
			<input v-model='message' placeholder="edit me">
			<p>Message is: {{message}} </p>
			<!-- 多行文本输入 -->
	
		<Textarea v-model='message2' placeholder='add multiple lines.'></Textarea>
			<p style='white-space:pre-line;'>{{message2}}</p>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el: "#app",
				data: {
					message:'',
					message2:''
				}
			})
		</script>
	</body>
</html>

双向绑定的输出结果如下:
在这里插入图片描述

  • checkbox和radio使用checked属性和change事件
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script type='text/javascript' src='vue.js'></script>
		<title></title>
	</head>
	<body>
		<div id='app'>			
			<div style='margin-top:20px;'>
				<input type='checkbox' id='chengdu' value='成都' v-model="checkedNames">
				<label for="chengdu">成都</label>
				<input type='checkbox' id='xiamen' value='厦门' v-model="checkedNames">
				<label for="chengdu">厦门</label>
				<input type='checkbox' id='chengdu' value='北京' v-model="checkedNames">
				<label for="chengdu">北京</label>
				<br>
				<span>checked names: {{checkedNames}}</span>
			</div>
			<div style='margin-top:20px;'>
				<input type='radio' id='chengdu' value='成都' v-model="picked">
				<label for="chengdu">成都</label>
				<input type='radio' id='xiamen' value='厦门' v-model="picked">
				<label for="chengdu">厦门</label>
				<input type='radio' id='chengdu' value='北京' v-model="picked">
				<label for="chengdu">北京</label>
				<br>
				<span>picked: {{picked}}</span>
			</div>
			
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el: "#app",
				data: {
					checkedNames:[],//checkbox是复选框,选中它的时候会有多个变量保存,固定义为数组。
					picked:''
				}
			})
		</script>
	</body>
</html>

输出结果如下:
在这里插入图片描述

表单提交

在表单元素发生变化的时候,在data中都可以收集到表单元素对应变化的值:
我们在页面中创建提交按钮来绑定提交点击事件。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script type='text/javascript' src='vue.js'></script>
		<title></title>
	</head>
	<body>
		<div id='app'>			
			<div style='margin-top:20px;'>
				<input type='checkbox' id='chengdu' value='成都' v-model="checkedNames">
				<label for="chengdu">成都</label>
				<input type='checkbox' id='xiamen' value='厦门' v-model="checkedNames">
				<label for="chengdu">厦门</label>
				<input type='checkbox' id='chengdu' value='北京' v-model="checkedNames">
				<label for="chengdu">北京</label>
				<br>
				<span>checked names: {{checkedNames}}</span>
			</div>
			<div style='margin-top:20px;'>
				<input type='radio' id='chengdu' value='成都' v-model="picked">
				<label for="chengdu">成都</label>
				<input type='radio' id='xiamen' value='厦门' v-model="picked">
				<label for="chengdu">厦门</label>
				<input type='radio' id='chengdu' value='北京' v-model="picked">
				<label for="chengdu">北京</label>
				<br>
				<span>picked: {{picked}}</span>
			</div>
			<button type='button' @click="submit">提交</button>
			
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el: "#app",
				data: {
					checkedNames:[],//checkbox是复选框,选中它的时候会有多个变量保存,固定义为数组。
					picked:''
				},
				methods: {
					submit: function(){
						var postObj={
							checkval: this.checkedNames,
							pickval: this.picked
						};
						console.log(this.postObj);
					}
				}
			})
		</script>
	</body>
</html>
  • 为啥此处我的console输出结果是undefined,有待解决?
    在这里插入图片描述
发布了10 篇原创文章 · 获赞 0 · 访问量 162

猜你喜欢

转载自blog.csdn.net/yjj510818155/article/details/104748420