多选框事件(多选和单选)

jquery实现 引入jquery文件

 // 在线引入
 <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js" type="text/javascript"></script>

html代码

<div style='width:300px;height:50px;margin-left:300px;margin-right:auto;'>
		<label>多选框: </label>	
		<input type="checkbox" name="checkAll" value="" title="全选">全选
		<input type="checkbox" name="type" value="奥迪" title="奥迪">奥迪
		<input type="checkbox" name="type" value="丰田" title="丰田">丰田
		<input type="checkbox" name="type" value="大众" title="大众">大众	  
</div>

jquery代码

$(function(){
		 // 获取单个单选框的值
		$(":checkbox[name='type']").on('change', function () {	
			var item= $(this).val();
			alert(item)
			arr = $('input[name="type"]').length
			checkedArr = $('input[name="type"]:checked').length
			if(arr == checkedArr){
				$('input[name="checkAll"]').prop('checked', 'checked')
			} else {
				$('input[name="checkAll"]').prop('checked', '')
			}
		})

		// 获取同一name全部多选框的状体
		$(":checkbox[name='checkAll']").on('click', function () {
			var flag = $(this).prop('checked')
			//alert(flag)
		    var item=$('input:checkbox[name="type"]');
			item.each(function(index, element){
				//alert($(element).val())
				if(flag) {
					$(element).prop("checked", "checked")
					alert('全选')
				} else {
					$(element).prop("checked", "")
					alert('全不选')
				}
			})
		})
	})

效果如下
选中一个弹窗 全选切换

2、layui实现
引入文件

 <link href="layui-v2.5.5/layui/css/layui.css" rel="stylesheet" />
 <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js" type="text/javascript"></script>
 <script src="layui-v2.5.5/layui/layui.js" type="text/javascript"></script>

html文件

<div class="layui-form">   
    <div style='width:300px;height:50px;margin-left:300px;margin-right:auto;'>
	    <label>多选框: </label>	
		<input type="checkbox" name="checkAll" lay-filter="demoCheckboxAll" value="" title="全选">全选
		<input type="checkbox" name="type" lay-filter="demoCheckbox" value="奥迪" title="奥迪">奥迪
		<input type="checkbox" name="type" lay-filter="demoCheckbox" value="丰田" title="丰田">丰田
		<input type="checkbox" name="type" lay-filter="demoCheckbox" value="大众" title="大众">大众	  
    </div>
  </div>

js文件

layui.use(['element','form', 'table','layer'], function () {
	  let form = layui.form, layerDom = layui.layer, element = layui.element;
	  // 获取单个选中的值
	  form.on('checkbox(demoCheckbox)', function (data) {
				// alert(data.elem.checked);
				alert(data.value);//判断单选框的选中值
				arr = $('input[name="type"]').length
				checkedArr = $('input[name="type"]:checked').length
				// 若全选中则全选按钮自动选中
				if(arr == checkedArr){
					$('input[name="checkAll"]').prop('checked', 'checked')
				} else {
					$('input[name="checkAll"]').prop('checked', '')
				}
				form.render()
				
	  });

	   // 全选按钮切换
	  form.on('checkbox(demoCheckboxAll)', function (data) {
				var flag = data.elem.checked;
				alert(flag)
				arr = $('input[name="type"]')
				arr.each(function(index, item){
					if(flag){
						$(item).prop('checked', 'checked')
					} else {
						$(item).prop('checked','')
					}
					
				})
				form.render()
				
	  });
	  form.render()

	})

注意实现切换后要调用form.render()方法,否则不显示全选或不全选状态。 选中一项事件 全选切换事件

3、用vue实现
引入js文件如下

 <script src="vue.js" type="text/javascript"></script>

html代码如下

<div id="app">   
    <div style='width:300px;height:50px;margin-left:300px;margin-right:auto;'>
	    <label>多选框: </label>	
		<input type="checkbox" name="checkAll" @click='checkAll'  value="" title="全选">全选
		<input type="checkbox" name="type"  @click='checkOne'  value="奥迪" title="奥迪">奥迪
		<input type="checkbox" name="type"  @click='checkOne' value="丰田" title="丰田">丰田
		<input type="checkbox" name="type"  @click='checkOne' value="大众" title="大众">大众	  
    </div>
  </div>

js代码如下

var app = new Vue({
		el:'#app',
		data:{
			type:'',
		},
		created:function(){
			var _this = this;
		},
		methods:{
			checkOne:function(event){
				let _this = this
				_this.type = event.target.value
                alert(_this.type)
				arr = $('input[name="type"]').length
				checkedArr = $('input[name="type"]:checked').length
				if(arr == checkedArr){
					$('input[name="checkAll"]').prop('checked', 'checked')
				} else {
					$('input[name="checkAll"]').prop('checked', '')
				}
            },
			checkAll:function(event){
				let _this = this
				let flag = event.target.checked
				let arr = $('input[name="type"]')

				arr.each(function(index, item){
					if(flag){
						$(item).prop('checked', 'checked')
					}else {
						$(item).prop('checked', '')
					}
				})
				
            }
		},
        
	});

效果图
点击一项多选框

问题:为什么在layui或vue里也只能用jquery的选择器选择对象数组,可以用框架自带的lay-filter或v-model等标签实现么?

posted @ 2021-12-24 14:07  前端白雪  阅读(561)  评论(0编辑  收藏  举报