vue.js实现单选框、复选框和下拉框示例


Posted in Javascript onJuly 18, 2017

Vue.js可以很方便的实现数据双向绑定,所以在处理表单,人机交互方面具有很大的优势。下边以单选框、复选框和下拉框为例介绍他们在HTML和Vue.js中的具体实现方式。

一、单选框

  在传统的HTML中实现单选框的方法如下:

<div id="app"> 
 <input type="radio" name="gender" value="man" id="man"/><label for="man">男</label> 
 <input type="radio" name="gender" value="woman" id="women"/><label for="women">女</label> 
</div>

注:这里name属性值必须相同,以确保同一时间只有一个能被选中。同时用于识别发送至服务器的数据;value值也很重要,当按钮被选中时,该值将发送给服务器;

用vue.js实现单选框比较方便,举例如下。我们不再需要name属性,只需要使用v-model指令给每个选项绑定同一个变量就可以确保同一时间只有一个被选中,同时value属性还是需要的,表示选中时的值。

<div id="app"> 
 <label>男<input type="radio" v-model="gender" value="man"/></label> 
 <label>女<input type="radio" v-model="gender" value="woman"/></label> 
 <p>已选:{{gender}}</p><!--如果用原生js实现此功能比较麻烦--> 
</div> 
<script> 
 var app=new Vue({ 
  el:'#app', 
  data:{ 
   gender:'' 
  } 
 }); 
</script>

二、复选框

  在传统的HTML中实现复选框代码如下:

<div id="app"> 
 <input type="checkbox" name="whom" value="jack" id="Jack"/><label for="Jack">jack</label> 
 <input type="checkbox" name="whom" value="bob" id="Bob"/><label for="Bob">bob</label> 
 <input type="checkbox" name="whom" value="alice" id="Alice"/><label for="Alice">alice</label> 
</div>

从以上代码可以看到:HTML中单选框和复选框的构造方法类似,只是type值变成checkbox,同时也用name和value表征一个复选框以及选中情况。

在vue.js中构造复选框也与单选框类似,只是每个选项框都用v-model绑定一个变量,这些变量一般放在一个对象中,或者为v-model绑定一个相同的属性名称,且属性为数组;针对这两种情况的举例如下:

使用v-model为每个选项框绑定一个变量:

<div id="app"> 
 <label>jack<input type="checkbox" v-model="person.jack"/></label> 
 <label>bob<input type="checkbox" v-model="person.bob"/></label> 
 <label>alice <input type="checkbox" v-model="person.alice"/></label> 
 <p>已选:{{person}}</p> 
</div> 
<script> 
 var app = new Vue({ 
  el: '#app', 
  data: { 
   person: {jack: false, bob: false, alice: false} 
  } 
 }) 
</script>

从以上代码可以看到:这里已经不需要value属性,为每个属性绑定的值是boolean类型的,当选中时该值变为true,没选中为false;

给v-model绑定一个相同的数组类型的属性:

<div id="app"> 
 <label>jack<input type="checkbox" v-model="whom" value="jack"/></label> 
 <label>bob<input type="checkbox" v-model="whom" value="bob"/></label> 
 <label>alice <input type="checkbox" v-model="whom" value="alice"/></label> 
 <p>已选:{{whom.join('|')}}</p> 
</div> 
<script> 
 var app = new Vue({ 
  el: '#app', 
  data: { 
   whom: [] 
 } 
 }) 
</script>

从代码中可以看到:为每个选项都绑定一个相同的数组名称,这里需要value属性,当被选中时,相应的value值会加入到数组中,取消选中时,删除数组中对应的value值。

三、下拉框

传统的用HTML构造下拉框的代码如下:

<select name="selected"> 
 <option value="a">A</option> 
 <option value="b">B</option> 
 <option value="c">C</option> 
</select>

其中name用于发送给服务器时的数据识别,value为选中时发送给服务器的值。如果option中省略value,那么发送给服务器的值为option标签之间的值。

用vue2.0实现下拉框的方法如下:

<div id="app"> 
 <select v-model="selected"> 
  <option v-for="item in items" v-bind:value="item.value">{{item.text}}</option> 
 </select> 
 <span>已选:{{selected}}</span> 
</div> 
<script src="vue.js"></script> 
<script> 
 new Vue({ 
  el:'#app', 
  data:{ 
   items:[{text:'A',value:'a'},{text:'B',value:'b'},{text:'C',value:'c'}], 
   selected:'' 
  } 
 }); 
</script>

从代码中可以看到,使用v-for指令,避免重复书写option标签,同时用v-bind指令绑定value属性。当选中某一项时,该选项的value值赋给selected变量。

不管是html书写,还是vue实现,如果需要实现多选下拉框,只需要在select标签中写入multiple属性(同时vue中,selected变量初始化为一个空数组)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个JS小玩意 几个属性相加不能超过一个特定值.
Sep 29 Javascript
javascript 拖放效果实现代码
Jan 22 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
May 14 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
JavaScript对象数组排序函数及六个用法
Dec 23 Javascript
干货分享:让你分分钟学会javascript闭包
Dec 25 Javascript
JavaScript初学者必看“new”
Jun 12 Javascript
js装饰设计模式学习心得
Feb 17 Javascript
js中如何完美的解析数据
Mar 18 Javascript
详解用场景去理解函数柯里化(入门篇)
Apr 11 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 #Javascript
iscroll.js滚动加载实例详解
Jul 18 #Javascript
基于iScroll实现下拉刷新和上滑加载效果
Jul 18 #Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 #jQuery
H5基于iScroll实现下拉刷新和上拉加载更多
Jul 18 #Javascript
iscroll动态加载数据完美解决方法
Jul 18 #Javascript
Angular4学习笔记之新建项目的方法
Jul 18 #Javascript
You might like
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
原生js实现省市区三级联动代码分享
2018/02/12 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
Python备份Mysql脚本
2008/08/11 Python
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
python中去空格函数的用法
2014/08/21 Python
Python Tkinter简单布局实例教程
2014/09/03 Python
python学习数据结构实例代码
2015/05/11 Python
Python中super关键字用法实例分析
2015/05/28 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
Python编码爬坑指南(必看)
2016/06/10 Python
深入理解Python3中的http.client模块
2017/03/29 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
pytorch masked_fill报错的解决
2020/02/18 Python
python开根号实例讲解
2020/08/30 Python
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
志愿者宣传口号
2014/06/17 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js