动态生成复选框列表弹性盒子

本文介绍了如何使用JavaScript和jQuery动态加载复选框列表,同时监听复选框状态,将选中的内容实时同步到文本域中,利用CSS控制布局,以及在处理字符串时避免使用某些字符串方法的原因和动态正则表达式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图

在这里插入图片描述

1.准备一块盒子区域 id=“checkBoxList” 为例

//样式的简单介绍
style{
overflow:scroll; //让超出div 内容在div区域内以滚动条形式呈现
display: flex;  //搞一个弹性盒子容器
flex-wrap: wrap;align-content: flex-start; // 文本对齐方式 这里是上下元素的内容对齐
}
//这里行内样式举例
<div id="checkBoxList" style="overflow:scroll;height:93%;
display: flex;flex-wrap: wrap;align-content: flex-start; width: 100%;
padding-left: 10px">

 //这块区域待动态放复选框列表
 
</div>

2.准备一块文本域 textArea

<textarea id="textAreaId" rows="16" cols="70" placeholder="请选择复选框加载内容到此处..."
 style=" resize:none; font-size: 25px;font-family:'Microsoft YaHei';
 width: 100%;height: 100% ">这里不要留空白,看完删掉此处,否则鼠标不聚焦文本域左上方</textarea>

3.动态加载复选框列表项

这里加载列表项不允许以 “、”分割,为后续分割符使用

//页面初始化
$.parser.onComplete = function(res) {
	//页面打开执行或者手动点击加载
	dynamicLoadCheckboxList()
}

function dynamicLoadCheckboxList() {
	//清空文本域内容
    document.getElementById("textAreaId").value='';
	//清空盒子里内容
    $("#checkBoxList").html("");
    
    //后台请求复选框内数据列表  --简单一个sql查询语句
    $.post(BASE_PATH + "/xxxController/xxxxxxx.do", {}, function (res) {
        if (res.result == '200') {
          let  checkDataList= res.checkDataList;
            for(let j=0; j < checkDataList.length; j++ ){
            //在盒子中动态加载 checkbox元素列表
                $("#checkBoxList").append(
                    "<label style='font-size: 15px;width: 25%'>"
                    + "<input name='checkItem' type='checkbox'  value="
                    + checkDataList[j].checkName
                    + ">"
                    + checkDataList[j].checkName
                    +"</label>"
                );
                //每四个元素内容一行                
                if( (j+1) % 4 == 0){
                    $("#checkBoxList").append("<br>");
                }
            }     
        } else {
            showMessage(res.Msg);
        }
    }, "JSON");
}

4.对盒子内复选框列表项进行监听


$("#checkBoxList").on('click', function () {
		//获取文本域内容
		let textArea = "textAreaId";
		//复选框选择勾选遍历每一项元素
		$("input[name=checkItem]:checkbox:checked").each(function () {
			//获取当前遍历的复选框值  上边代码中input 内 value="checkName" 就是取这个value
			let str = $(this).val().toString();
			let flag = $(this).context.checked;//取复选框勾选状态 这里是true 
			selectCheckedHandle(flag,str,textArea);
		});
		
		//复选框取消勾选遍历每一项元素
		$("input[name=checkItem]:not(:checked)").each(function() {
			let deletestr = $(this).val().toString();
			unSelectUncheckedHandle(deletestr,checkIdArea);
		});
	});


//遍历选择复选框处理
function selectCheckedHandle(flag,str,checkIdArea) {
    debugger
    let ele = document.getElementById(checkIdArea);
    let reg = /\s+/g;//去除空白区域
    if (typeof ele.value === 'string') {
        ele.value = ele.value.replace(reg, '');
    }
    if (ele.value.lastIndexOf('、') != ele.value.length -1){
        ele.value = ele.value+'、';
    }
    if (typeof str === 'string') {
        str = str.replace(reg, '');
    }

    if (flag) {
        if (str.length > 0) {
            if (ele.value.indexOf(str) == -1) {
                ele.value = ele.value.concat(str+'、');
            } else {
                let flag = undefined;
                let tempArr = ele.value.split("、");
                for (let i = 0; i < tempArr.length; i++) {
                    if (tempArr[i] == str) {
                        flag = true;
                        break;
                    }else {
                        flag = false;
                    }
                }
                if (flag == false){
                    ele.value = ele.value.concat(str+'、');
                }
            }
        }
    }
}

//遍历取消勾选复选框处理
function unSelectUncheckedHandle(deletestr,checkIdArea) {
    debugger
    let ele = document.getElementById(checkIdArea);
    let reg = /\s+/g;
    if (typeof ele.value === 'string') {
        ele.value = ele.value.replace(reg, '');
    }
    if (typeof deletestr === 'string') {
        deletestr = deletestr.replace(reg, '');
    }
    let deleteArr = ele.value.split("、");
    for (let i = 0; i < deleteArr.length; i++) {
        if (deleteArr[i] == deletestr) {
            deleteArr.splice(i,1);
            ele.value = deleteArr.join("、");
        }
    }
}

5.解释字符串处理常用方法无效

为什么没用search(),match(),lastIndexOf()??

因为这些只能查找字符串的子元素的首个位置或者下标位置,但是不容易查找第二个,或许可以搭配正则表达式,进行完全匹配是否是寻找的那个复选框内容,如果不是,可以继续,但是不能确定找到的第二个长度是多长,所以用了数组分割
简单说没有使用好正则表达式,下面是我的思路未解全....后续有空再说

dynamicStr   //为复选框所携带的字符串内容
//首个下标  
 let currentLocat  =  str.indexOf(dynamicStr)  
// 用正则表达匹配,如果是false,继续下一个
while(!RegExp("^" + 'dynamicStr' + "$").test('dynamicStr')){//false的话继续
    currentLocat = str.indexOf(dynamicStr,currentLocat+1);
    if(currentLocat >-1){
//       继续正则比对  
	}
}

生成动态正则表达式 RegExp方法

生成动态 /^dynamicStr$/

console.log( RegExp("^" + 'dynamicStr' + "$"))
//举例
console.log(RegExp("^" + 'dynamicStr' + "$").test('dynamicStr')) //true
当然,以下是对uni-app中布局、组件和交互三个板块内容的进一步补充: ## 布局 在uni-app中,布局是构建页面的基础,它决定了页面中元素的排列和分布。 ### 1. 定位(Positioning) - **相对定位(Relative Positioning)**:元素的位置相对于其在文档流中的原始位置进行偏移。使用`top`、`right`、`bottom`、`left`属性。 - **绝对定位(Absolute Positioning)**:元素的位置相对于其最近的已定位(非static)祖先元素进行定位。如果没有这样的祖先元素,则相对于初始化包含块(通常是文档的`<html>`元素)。 ### 2. 盒子模型(Box Model) - **边框(Border)**:围绕内边距的边框,可以设置宽度、样式和颜色。 - **内边距(Padding)**:元素内容和边框之间的空间,内边距会将元素的尺寸扩大。 - **外边距(Margin)**:元素与其他元素之间的空间,用于分隔元素。 ### 3. Flexbox 弹性布局 - **主轴(Main Axis)**:沿着主轴的排列方向(`row`或`column`)。 - **侧轴(Cross Axis)**:垂直于主轴的轴。 - **空间分配**:使用`justify-content`和`align-items`属性来控制项目在主轴和侧轴上的对齐方式。 - **项目排列**:使用`flex-direction`属性来控制项目的排列方向。 ## 组件 uni-app提供了丰富的组件,用于构建用户界面。 ### 1. 视图容器组件 - **`view`**:类似于HTML中的`div`,用于页面布局。 - **`cover-view`**:覆盖在原生组件上的容器,可以覆盖在`map`、`video`等组件上。 - **`swiper`**:滑块视图容器,用于创建滑动效果。 - **`scroll-view`**:可滚动视图容器,用于区域滚动。 ### 2. 表单组件 - **`input`**:输入框,用于文本输入。 - **`button`**:按钮,用于触发事件。 - **`checkbox`**:复选框,用于多项选择。 - **`radio`**:单选框,用于单项选择。 - **`switch`**:开关,用于切换状态。 - **`slider`**:滑块,用于选择一个范围值。 ### 3. 选择器组件 - **`picker`**:选择器,用于选择信息,如日期、时间等。 - **`picker-view`**:多列选择器,用于复杂的选择场景。 ### 4. 媒体组件 - **`audio`**:音频组件,用于播放音频。 - **`video`**:视频组件,用于播放视频。 - **`camera`**:相机组件,用于拍照或录像(部分平台支持)。 - **`live-player`**:直播播放组件(部分平台支持)。 - **`live-pusher`**:直播推流组件(部分平台支持)。 ### 5. 地图组件 - **`map`**:地图组件,用于显示地图和标记位置。 ### 6. 图标组件 - **`icon`**:图标组件,使用`type`属性指定图标类型,`size`属性指定图标大小。 ## 交互 在uni-app中,交互是用户与应用之间沟通的桥梁。 ### 1. 组件间交互 - **事件绑定**:通过`@`符号绑定事件,如`@click`、`@change`等。 - **数据绑定**:使用`v-bind`或简写`:`绑定数据。 ### 2. 页面间交互 - **页面跳转**:使用`uni.navigateTo`、`uni.redirectTo`等API实现页面跳转。 - **页面传参**:通过`url`参数传递数据。 ### 3. 前后端交互 - **网络请求**:使用`uni.request`发起网络请求,与后端进行数据交互。 - **数据缓存**:使用`uni.setStorageSync`和`uni.getStorageSync`进行数据缓存。 ### 4. 表单提交 - **提交表单**:使用`form`组件的`@submit`事件处理表单提交。 ### 5. 用户反馈 - **加载提示**:使用`uni.showLoading`和`uni.hideLoading`显示和隐藏加载提示。 - **模态弹窗**:使用`uni.showModal`显示模态弹窗。 --- 以上是对uni-app布局、组件和交互板块内容的补充,希望能够帮助您更全面地理解和掌握uni-app开发。如果您有任何疑问或需要进一步的帮助,请随时提问。生成思维导图
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值