easyUI的combobox实现级联

先简单介绍下combobox:

easyUI重写了select,取而代之的是combobox,有如下几种方式可以创建一个combobox

1、使用select标签,并加上class="easyui-combobox",这种方式比较适用于静态的选项

2、使用input标签,并加上class="easyui-combobox",后面跟上data-options,可以用local或是remote方式加载数据

3、使用js方式,和2基本相同,只是把combobox一些属性的设置分离到了js中


下面是级联的思路:

combobox实现级联基本上和select类似,比如省份和城市的级联

当省份选完这个事件发生之后,城市的选择框里就会刷新数据,得到当前省份下的所有城市

那么关键点就是——》接收事件——》刷新第二级的选择框

combobox有提供onSelect这个事件点,且传入一个选中的记录rec,比如说我们可以取rec的主键rec.id(比如是浙江,id是29),那么我们可以拿到这个29去后台查询浙江省下的城市Json数据,这串Json就是需要放到城市combobox中的数据


那么开始动手吧:

<tr>
    <td>省份:</td>
    <td><input class="easyui-combobox" name=”province” data-options="
     	method:'get',
     	mode:'remote',
     	url:'test/getProvinceList',
     	onSelect:function(rec){
     		$('[comboname=city]').combobox('clear');
     		$('[comboname=city]').combobox('reload', 'test/getCityListByProvince?id=' + rec.id);
     	},
     	onLoadSuccess:function(){
     		var value = $(this).combobox('getValue');
     		if(value != ''){
    		<span style="white-space:pre">	</span>$('[comboname=city]').combobox('reload', 'test/getCityListByProvince?id=' + $(this).combobox('getValue'));
    			}
     	}
    	">
    </td>
    
    <td>城市:</td>
    <td><input class="easyui-combobox" panelHeight="auto" name="city" data-options="
     		prompt:'请先填入省份名称'
    	">
    </td>
</tr>


使用中可能碰到的问题:

1、为combobox指定name后,经过easyUI自己解析后,生成的combobox(也就是select)没有name这个属性,取而代之的是comboname,因为name要作为input的name。所以要根据name得到combobox要使用comboname

2、$('[comboname=city]').combobox('clear'); 这一步也是必要的,不然combobox中之前选中的值将无法清除,比如之前选的是浙江--杭州(id为1),若此时更改省份变为江苏,那么若不加clear,此时城市则变成当前省份id为1的城市,也就是南京(id为1)。要是此id在对应省份无记录,那么就只会显示一个id,那么显然不是我们想看到的。



  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
easyui combobox下拉框默认是单选的,如果要实现多选,需要做以下修改: 1. 在combobox的options中添加multiple:true,表示启用多选模式。 2. 在combobox的options中添加onSelect和onUnselect两个事件,用于在选择和取消选择时更新选中的值。 3. 在combobox的panel中添加checkbox或者复选框,用于选择多个选项。 以下是实现多选的示例代码: HTML代码: ``` <input id="cc" class="easyui-combobox" style="width:200px;"> ``` JavaScript代码: ``` $('#cc').combobox({ url: 'get_data.php', valueField: 'id', textField: 'text', multiple: true, panelHeight: 'auto', onSelect: function(record){ var value = $(this).combobox('getValues'); value.push(record.id); $(this).combobox('setValues', value); }, onUnselect: function(record){ var value = $(this).combobox('getValues'); var index = value.indexOf(record.id); if (index >= 0){ value.splice(index, 1); } $(this).combobox('setValues', value); }, onLoadSuccess: function(){ var data = $(this).combobox('getData'); var value = $(this).combobox('getValues'); var panel = $(this).combobox('panel'); panel.find('.combo-panel-checkbox').remove(); $.each(data, function(index, item){ var checkbox = $('<input type="checkbox" class="combo-panel-checkbox">').val(item.id); if (value.indexOf(item.id) >= 0){ checkbox.prop('checked', true); } checkbox.insertBefore(panel.find('.combo-panel-list')); }); }, onShowPanel: function(){ var data = $(this).combobox('getData'); var value = $(this).combobox('getValues'); var panel = $(this).combobox('panel'); panel.find('.combo-panel-checkbox').prop('checked', false); $.each(data, function(index, item){ if (value.indexOf(item.id) >= 0){ panel.find('.combo-panel-checkbox[value="'+item.id+'"]').prop('checked', true); } }); } }); ``` 注:示例代码中的get_data.php是一个返回JSON格式数据的接口,可以根据实际情况修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值