JS 之 下拉框三级联动(一)


<!DOCTYPE html>
<html>
<head>
<title>纯JS省市区联动</title>
<script type="text/javascript" src="jsAddress.js"></script>
</head>
<body>
<div>
省:<select id="cmbProvince"></select>
市:<select id="cmbCity"></select>
区:<select id="cmbArea"></select>
<br /><br />
省:<select id="Select1"></select>
市:<select id="Select2"></select>
区:<select id="Select3"></select>
<script type="text/javascript">
addressInit('cmbProvince', 'cmbCity', 'cmbArea', '陕西', '宝鸡市', '金台区');
addressInit('Select1', 'Select2', 'Select3');
</script>
</div>
</body>
</html>

var addressInit = function(_cmbProvince, _cmbCity, _cmbArea, defaultProvince, defaultCity, defaultArea)
{
    var cmbProvince = document.getElementById(_cmbProvince);
    var cmbCity = document.getElementById(_cmbCity);
    var cmbArea = document.getElementById(_cmbArea);
     
    function cmbSelect(cmb, str)
    {
        for(var i=0; i<cmb.options.length; i++)
        {
            if(cmb.options[i].value == str)
            {
                cmb.selectedIndex = i;
                return;
            }
        }
    }
    function cmbAddOption(cmb, str, obj)
    {
        var option = document.createElement("OPTION");
        cmb.options.add(option);
        option.innerHTML = str;
        option.value = str;
        option.obj = obj;
    }
     
    function changeCity()
    {
        cmbArea.options.length = 0;
        if(cmbCity.selectedIndex == -1)return;
        var item = cmbCity.options[cmbCity.selectedIndex].obj;
        for(var i=0; i<item.areaList.length; i++)
        {
            cmbAddOption(cmbArea, item.areaList[i], null);
        }
        cmbSelect(cmbArea, defaultArea);
    }
    function changeProvince()
    {
        cmbCity.options.length = 0;
        cmbCity.onchange = null;
        if(cmbProvince.selectedIndex == -1)return;
        var item = cmbProvince.options[cmbProvince.selectedIndex].obj;
        for(var i=0; i<item.cityList.length; i++)
        {
            cmbAddOption(cmbCity, item.cityList[i].name, item.cityList[i]);
        }
        cmbSelect(cmbCity, defaultCity);
        changeCity();
        cmbCity.onchange = changeCity;
    }
     
    for(var i=0; i<provinceList.length; i++)
    {
        cmbAddOption(cmbProvince, provinceList[i].name, provinceList[i]);
    }
    cmbSelect(cmbProvince, defaultProvince);
    changeProvince();
    cmbProvince.onchange = changeProvince;
}
 
var provinceList = [
{name:'北京', cityList:[         
{name:'市辖区', areaList:['东城区','西城区','崇文区','宣武区','朝阳区','丰台区','石景山区','海淀区','门头沟区','房山区','通州区','顺义区','昌平区','大兴区','怀柔区','平谷区']},
{name:'县', areaList:['密云县','延庆县']}
]},
{name:'上海', cityList:[         
{name:'市辖区', areaList:['黄浦区','卢湾区','徐汇区','长宁区','静安区','普陀区','闸北区','虹口区','杨浦区','闵行区','宝山区','金山区','松江区','青浦区','南汇区','奉贤区']},   
{name:'县', areaList:['崇明县']}
]}
];





在layui实现三级联动下拉框,可以通过以下步骤实现: 1. 在HTML页面定义三个下拉框的DOM元素,分别为省、市、县: ```html <div class="layui-form-item"> <label class="layui-form-label">省份</label> <div class="layui-input-inline"> <select name="province" id="province"> <option value="">请选择省份</option> </select> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">城市</label> <div class="layui-input-inline"> <select name="city" id="city"> <option value="">请选择城市</option> </select> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">区县</label> <div class="layui-input-inline"> <select name="area" id="area"> <option value="">请选择区县</option> </select> </div> </div> ``` 2. 使用ajax获取省份数据并填充到省份下拉框: ```javascript // 获取省份数据 $.ajax({ url: '/getProvince', type: 'GET', success: function (data) { var html = '<option value="">请选择省份</option>'; $.each(data, function (i, item) { html += '<option value="' + item.id + '">' + item.name + '</option>'; }); $('#province').html(html); layui.form.render('select'); } }); ``` 3. 给省份下拉框绑定change事件,在省份改变时,使用ajax获取城市数据并填充到城市下拉框: ```javascript // 绑定省份change事件 layui.form.on('select(province)', function (data) { // 获取城市数据 $.ajax({ url: '/getCity', type: 'GET', data: {provinceId: data.value}, success: function (data) { var html = '<option value="">请选择城市</option>'; $.each(data, function (i, item) { html += '<option value="' + item.id + '">' + item.name + '</option>'; }); $('#city').html(html); layui.form.render('select'); } }); }); ``` 4. 给城市下拉框绑定change事件,在城市改变时,使用ajax获取区县数据并填充到区县下拉框: ```javascript // 绑定城市change事件 layui.form.on('select(city)', function (data) { // 获取区县数据 $.ajax({ url: '/getArea', type: 'GET', data: {cityId: data.value}, success: function (data) { var html = '<option value="">请选择区县</option>'; $.each(data, function (i, item) { html += '<option value="' + item.id + '">' + item.name + '</option>'; }); $('#area').html(html); layui.form.render('select'); } }); }); ``` 5. 在后端编写获取省份、城市、区县数据的接口,根据前端传递的参数查询对应的数据并返回。 ```javascript // 获取省份数据 app.get('/getProvince', function (req, res) { var sql = 'select id, name from province'; db.query(sql, function (err, result) { if (err) throw err; res.json(result); }); }); // 获取城市数据 app.get('/getCity', function (req, res) { var provinceId = req.query.provinceId; var sql = 'select id, name from city where province_id = ?'; db.query(sql, [provinceId], function (err, result) { if (err) throw err; res.json(result); }); }); // 获取区县数据 app.get('/getArea', function (req, res) { var cityId = req.query.cityId; var sql = 'select id, name from area where city_id = ?'; db.query(sql, [cityId], function (err, result) { if (err) throw err; res.json(result); }); }); ``` 以上就是使用layui实现三级联动下拉框的步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值