H5页面使用iosSelect.js省市县乡村四级联动

本文介绍了在H5页面中使用iosSelect.js实现省市县乡村四级联动选择的详细步骤,包括需引入的文件、HTML结构、JavaScript代码、ajax接口注意事项,以及iOSselect组件的特点和参数说明。该组件支持多种前端框架,并提供高度定制和多级联动功能。

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

H5页面使用iosSelect.js省市县乡村四级联动

项目效果

在这里插入图片描述

一.需引入文件

<link rel="stylesheet" href="static/css/iosSelect.css">
<script src="static/js/zepto.js"></script>
<script src="static/js/iscroll.js"></script>
<script src="static/js/iosSelect.js"></script>

Js和Css文件地址

二.html文件

<div class="form-item item-line" id="selectDate">                 						               
    <div class="pc-box">                     
        <span data-city="{$city['id']}" data-area="{$area['id']}" data-street="{$street['id']}" data-village="{$village['id']}" id="showDate">手动选择绑定地址</span>  
    </div>             
</div>

三.javascript

<script type="text/javascript">
 var selectDateDom = $('#selectDate'); // 绑定一个触发元素
    var showDateDom = $('#showDate'); // 绑定一个存储结果的元素
    // 数据初始化
    var city = "<?php echo $city['id'];?>";  //市
	var area = "<?php echo $area['id'];?>";  //县/ 区
	var street = "<?php  echo $street['id'];?>"; // 乡
	var village = "<?php  echo $village['id']; ?>"; //村  
    showDateDom.attr('data-city', city);
    showDateDom.attr('data-area', area);
    showDateDom.attr('data-street', street);
	showDateDom.attr('data-village', village);
    var cityData = function(callback) {
	$.ajax({
	url: "__APP__/Home/getCtiy",
					type: "post",
					success: function(data) {
						var city = [];
						$.each(data, function(i, item){    
							city.push({
								 id:item['id'] ,
								 value: item['value'],
								 parentId:item['parentId']
							});   						
						}); 
					callback(city)	  	
					}
				});
    }
    var areaData = function (city, callback) {
	$.ajax({
	url: "__APP__/Home/getArea",
					type: "post",
					data:{
						pid:city
					},
					success: function(data) {
						var area = [];
							$.each(data, function(i, item){    
								area.push({
									 id:item['id'] ,
									 value: item['value'],
									 parentId:item['parentId']
								});   						
							}); 
						callback(area)						
					}
				});
	};    
    var streetData = function (city, area, callback) {
     $.ajax({
     url: "__APP__/Home/getStreet",
     				type: "post",
     				data:{
     					pid:area
     				},
     				success: function(data) {
     					var street = [];
     						$.each(data, function(i, item){    
     							street.push({
     								 id:item['id'] ,
     								 value: item['value'],
     								 parentId:item['parentId']
     							});   						
     						}); 
     					callback(street)						
     				}
     			});
    };
    var villageData = function(city, area, street, callback) {
        var village = [];
        $.ajax({
        url: "__APP__/Home/getVillage",
        				type: "post",
        				data:{
        					pid:street
        				},
        				success: function(data) {
        					var village = [];
        						$.each(data, function(i, item){    
        							village.push({
        								 id:item['id'] ,
        								 value: item['value'],
        								 parentId:item['parentId']
        							});   						
        						}); 
        					callback(village);						
        				}
        			});
        
    };

    selectDateDom.bind('click', function () { // 添加监听事件
        var oneLevelId = showDateDom.attr('data-city');
        var twoLevelId = showDateDom.attr('data-area');
        var threeLevelId = showDateDom.attr('data-street');
        var fourLevelId = showDateDom.attr('data-village');
        var iosSelect = new IosSelect(4,   //需要几级选项直接修改数字即可,最多支持6级
            [cityData, areaData, streetData, villageData],
            {
                title: '地址选择',
                itemHeight: 35,  // 每个元素的高度
                relation: [1, 1, 1, 0],  //第一第二第三联动  ,最多支持六级,每各级别是用逗号隔开即可 , 0是不联动 1是想选项联动
                itemShowCount: 9,    // 每一列显示元素个数,超出将隐藏
                oneLevelId: oneLevelId,
                twoLevelId: twoLevelId,
                threeLevelId: threeLevelId,
                fourLevelId: fourLevelId,
                callback: function (selectOneObj, selectTwoObj, selectThreeObj, selectFourObj) { // 用户确认选择后的回调函数
                    showDateDom.attr('data-city', selectOneObj.id);
                    showDateDom.attr('data-area', selectTwoObj.id);
                    showDateDom.attr('data-street', selectThreeObj.id);
                    showDateDom.attr('data-village', selectFourObj.id);
                    showDateDom.html(selectOneObj.value + ' ' + selectTwoObj.value + ' ' + selectThreeObj.value + ' ' + selectFourObj.value );
                }
        });
    });
</script >

四.ajax接口注意事项:

返回数据形式为:
在这里插入图片描述
市 县 乡 村 级别之间通过parentId字段进行关联

五.iOSselect特点

  • 0依赖,只需引用一个js和css即可
  • 样式可自己定制,也可使用默认样式
  • 一个页面同时实例化多个组件
  • jquery zepto angular vue react均适用
  • 支持最多6级级联 支持设置高度和高度单位
  • 适用于android和iOS设备(PC端支持IE9+,不过PC端上滑动体验不太实用)

六.iOSselect参数说明

level

default: 1
type:    number

数据的层级,最多支持6层

data

default: undefined
type:    ...Array

[oneLevelData[, twoLevelData[, threeLevelData[, fourLevelData[, fiveLevelData[, sixLevelData]]]]]] 可以用数组,也可以用方法。 6项分别对应级联1,2,3,4,5,6项,每一项又是一个数组或方法 如果是数组: 每一项数组中包含一系列对象,每个对象必须要有id,作为该条数据在该项数组中的唯一标识,value作为显示值,parentId是可选属性,作为关联的标志,数据形如

var iosProvinces = [
  {"id": "130000', "value": "河北省", "parentId": "0"}
];
var iosCitys = [
  {"id":"130100","value":"石家庄市","parentId":"130000"},
];

当我们选择河北省时,就到城市中找到parentId为河北省id的数据,然后展示出来。

如果是方法: 传入一个方法,在方法中获取数据,该方法有该列前序列的选中值和回调方法。 如果是第一列的方法,可如下定义:

function oneFun(callback) {
	var arr1 = [];
	callback(arr1);
}

如果是第二列的方法,可如下定义:

function twoFun(oneLevelId, callback) {
	var arr2 = [];
	callback(arr2);
}

如果第三列,可如下定义方法:

function threeFun(oneLevelId, twoLevelId, callback) {
	var arr3 = [];
	callback(arr3);
}

依次类推,第六列获取数据的方法可如下定义:、

function sixFun(oneLevelId, twoLevelId, threeLevelId, fourLevelId, fiveLevelId, callback) {
	var arr6 = [];
	callback(arr6);
}

在方法里可以根据前序列的选中值定义需要的数据,比如年月日,当年月变化时,可根据年月选中值,设置日期的取值范围。

如何ajax获取数据
在这里插入图片描述
options

type:    object

其余选项,含以下几个属性:

options.container

default: ''
type:    string

实例化后的对象包裹元素,可选项

options.callback

default: undefined
type:    function

选择完毕后的回调函数,必选项 options.callback(selectOneObj, selectTwoObj, selectThreeObj, selectFourObj, selectFiveObj, selectSixObj) selectNumberObj为每级对应选中项,包含对应数据的所有字段及dom对象

options.fallback

default: undefined
type:    function

选择取消后的回调函数,可选项

fallback: function (e) {
	console.log(e);
},

options.maskCallback

default: undefined     type:    function

点击背景层关闭组件时触发的方法,可选项

fallback: maskCallback (e) {
	console.log(e);
},

options.title

default: ''
type:    string

显示标题,可选项

options.sureText

default: '确定'
type:    string

设置确定按钮文字,可选项

options.closeText

default: '取消'
type:    string

设置取消按钮文字,可选项

options.itemHeight

default: 35
type:    number

每一项的高度,可选项

options.itemShowCount

default: 7
type:    number

组件展示的项数,可选项,可选3,5,7,9,不过不是3,5,7,9则展示7项

options.headerHeight

default: 44
type:    number

组件标题栏高度,可选项

options.cssUnit

default: 'px'
type:    string

元素css尺寸单位,可选项,可选px或者rem

options.addClassName

default: ''
type:    string

组件额外类名,用于自定义样式,可选项

options.relation

default: [0, 0, 0, 0, 0]
type:    ...Array

[oneTwoRelation, twoThreeRelation, threeFourRelation, fourFiveRelation, fiveSixRelation] 可选项。如果数据是数组(非方法),各级选项之间通过parentId关联时,需要设置;如果是通过方法获取数据,不需要该参数。

options.relation.oneTwoRelation

default: 0
type:    number

第一列和第二列是否通过parentId关联,可选项

options.relation.twoThreeRelation

default: 0
type:    number

第二列和第三列是否通过parentId关联,可选项

options.relation.threeFourRelation

default: 0
type:    number

第三列和第四列是否通过parentId关联,可选项

options.relation.fourFiveRelation

default: 0
type:    number

第四列和第五列是否通过parentId关联,可选项

options.relation.fiveSixRelation

default: 0
type:    number

第五列和第六列是否通过parentId关联,可选项

options.oneLevelId

type:    string

实例展示时,第一级数据默认选中值,可选项,默认为第一级数据第一项id

options.twoLevelId

type:    string

实例展示时,第二级数据默认选中值,可选项,默认为第二级数据第一项id

options.threeLevelId

type:    string

实例展示时,第三级数据默认选中值,可选项,默认为第三级数据第一项id

options.fourLevelId

type:    string

实例展示时,第四级数据默认选中值,可选项,默认为第四级数据第一项id

options.fiveLevelId

type:    string

实例展示时,第五级数据默认选中值,可选项,默认为第五级数据第一项id

options.sixLevelId

type:    string

实例展示时,第6级数据默认选中值,可选项,默认为第6级数据第一项id

options.showLoading

default: false
type:    boolean

实例展示时,在数据加载之前下拉菜单是否显示加载中的效果,建议ajax获取数据时设置为true

options.showAnimate

default: false
type:    boolean

是否显示入场动画和退场动画,如需自定义动画效果,请覆写.fadeInUp .layer和.fadeOutDown .layer的css3动画。PS:动画时间为0.5秒。

方法
close

关闭已实例化的组件

object.close();

事件
IosSelectCreated

组件创建完毕事件

window.addEventListener('IosSelectCreated', function(e) {
		console.log(e);
});

IosSelectDestroyed
组件销毁事件

window.addEventListener('IosSelectDestroyed', function(e) {
		console.log(e);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸猫@冒泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值