原生html和js实现联级查询(第一个选了才出现第二个的选项)

一、需求

        有一些内容需要实现联级查询的需求,比如选择了公司才出现公司对应的部门,或者选择了省份才出现省份对应的市区,这样的联级查询如何实现呢。

        PS:本实现方式用到了JQuery,主要用在元素获取和事件绑定上了。bootstrap主要用于样式设置,显得更好看一点,不用也没事,搜一搜js的获取dom节点的方法,还有js的事件绑定,那个addEventListener,一样的哈。

二、样式展示

三、实现

1、这里是用了那个php的activeform,其实就是设置了已给表单,然后表单里边有两个下拉列表,下拉列表里边绑定的数据是一个数组变量,从数据库里边查出来的。

<div class="row">
				
				<div class="col-xs-4 col-sm-4 col-md-4">
				<?= $form->field($select, 'problemSubsidiary',[
        'labelOptions' => ['style' => 'display:none;']
    ])->dropDownList(
						$problemSubsidiaryList,
						['id' => 'select2-company','style' => 'width:100%;','value' => null,'prompt' => '']
						
					); ?>
			</div>

			<div class="col-xs-4 col-sm-4 col-md-4">

				<?= $form->field($select, 'problemDepartment',[
        'labelOptions' => ['style' => 'display:none;']
    ])->dropDownList(
						$problemDepartmentList,
						['id' => 'select2-department','style' => 'width:100%;','value' => null,'prompt' => '']
					); ?>
			</div>
				<div class="col-xs-3 col-sm-3 col-md-3">
					<button type="submit" class="btn btn-primary" id="search"><span class="glyphicon glyphicon-search"></span> 查询</button>
				</div>
			</div>

不用管php代码,如果是用了一下样式依赖的话就简单了,如果没用样式依赖,就先看看怎样用两个数组渲染出两个下拉框吧。

2、为第一个下拉框绑定change事件

        change事件是下拉框选中的内容发生变化的时候触发的。也就是,在第一个下拉框选中的内容发生改变时,重新设置第二个下拉框使用的变量的值。

$.fn.getDepartment = function(company,department) {
	
		$.ajax({
			type:"POST",
			dataType:"json",
			data:{"company":company},
			url:"getdepartment",  
			success:function(data) {
                //此时返回的data就是所有的这个公司的部门名称
				var depList = data.obj;
				var options = "<option value=''>Select a department...</option>";
                $.each(depList, function(key, val) {
                    if(key == '$select2p'){
                        options += "<option value='" + key + "' selected>" + val + "</option>";
                    }
                    options += "<option value='" + key + "'>" + val + "</option>";
                });
                $('#select2-department').html(options);
                
                // 重新初始化 Select2 插件以支持模糊查询
                $('#select2-department').select2({
                    placeholder: '输入部门名称',
                    allowClear: true
                });
                
			}
		});
   };

 这里是使用ajax请求去后端获取的数据,把company作为参数传到了后端,根据后端的返回结果,将返回的结果处理一下以后,绑定到了第二个下拉框的html中,最后使用select2插件初始化是为了使下拉框具有模糊搜索功能。

我知道这篇讲的和粑粑一样,你们将就着看,因为是php代码,随意前后端混一块了可能不太好看,看不懂就再搜搜其他的

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个基本的示例代码,您可以根据自己的需要进行修改和优化。 HTML代码: ```html <div class="tabs"> <div class="tab-header"> <div class="tab-item active" data-tab="tab1">Tab 1</div> <div class="tab-item" data-tab="tab2">Tab 2</div> <div class="tab-item" data-tab="tab3">Tab 3</div> </div> <div class="tab-content"> <div class="tab-pane active" data-tab="tab1"> <p>这是第一个选项卡的内容。</p> </div> <div class="tab-pane" data-tab="tab2"> <p>这是第二个选项卡的内容。</p> </div> <<div class="tab-pane" data-tab="tab3"> <p>这是第三个选项卡的内容。</p> </div> </div> </div> ``` CSS代码: ```css .tabs { width: 100%; max-width: 600px; margin: 0 auto; border: 1px solid #ccc; } .tab-header { display: flex; justify-content: space-between; border-bottom: 1px solid #ccc; } .tab-item { padding: 10px; cursor: pointer; border-bottom: 2px solid transparent; } .tab-item.active { border-bottom-color: #000; } .tab-content .tab-pane { display: none; padding: 10px; } .tab-content .tab-pane.active { display: block; } ``` JS代码: ```js const tabItems = document.querySelectorAll('.tab-item'); const tabPanes = document.querySelectorAll('.tab-pane'); tabItems.forEach(item => { item.addEventListener('click', () => { const activeTab = item.dataset.tab; tabItems.forEach(item => { item.classList.remove('active'); }); tabPanes.forEach(pane => { pane.classList.remove('active'); if (pane.dataset.tab === activeTab) { pane.classList.add('active'); } }); item.classList.add('active'); }); }); ``` 这段代码会为每个选项卡标签添加一个点击事件监听器,当点击标签时,它会将所有标签和内容面板的活动类移除,然后添加活动类到当前点击的标签和对应的内容面板上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值