EasyUI,comobox兼容可编辑和和下拉框

问题初遇

最近在开发一个功能的时候遇到一个问题。


EasyUI中的comobox,组合框可以在下拉框中选择,也可以手动输入后,因为有自带的模糊查询,下拉框中有对应内容的提示。

问题来了:

1、如果你不去选择安卓,这里应该提示你这名称是有错的。

2、如果你输入了360,这里没有360的选项,但是数据库里面有360这个对应的一个平台的时候,是正确的,

没有的话应该返回错误。


EasyUI comobox实现原理

这个实现一般是:

前端页面:

//获取应用名combobox的选项
$('#platform').combobox({
    url:'paltform.action',
    valueField:'id',
    textField:'text'
});

valueFiled为绑定到comobox的value上的基础数据的名称。textFiled为绑定到comobox的text上的基础数据的名称。

就像上面的安卓,安卓其实是text的值,其实value值是一个数字。


一般数据库设计的时候遵循三范式,所以关联表的时候,一张表里面有另一张表的id,根据id再去取对应的名称。


后端

platform.action的实现:

其实EasyUI是的数据格式要求是json,本篇文章的例子是id和text字段,json串里面需要这两个属性。

所以我们可以新建一个类comobox,包括这两个字段。

然后去数据库请求平台数据,将id和text传进comobox类中,再封装成list对象。

然后转换为json串,返回前端。


[{"id":"1","text":"安卓"}]

问题的解决

最简单的解决办法

直接将组合框设置成不可编辑,这样就一定手动选择下拉框。

editable="false"  

缺点,如果组合框有100个选项又不可编辑,即不能使用模糊查询,这样操作起来十分复杂。


自己想到的方法

因为选中下拉框之后,最后后台获取的不是text字段,而是text对应的value,即平台的id。

所以例子中的 安 没选中的时候,传入的值是安,而不是安卓对应的id,此时,只要判断

它为数字非法就可以了。

if(!(/^[+]?[1-9]+\d*$/i.test($('#platform').combobox('getValue')))){
	$.messager.alert("提示","请在下拉框中选择平台");
	return;
}

但是,如果平台就是数字命名怎么办呢,如果不做判断,那么他会插进这个数字,

但是事实上,这个数字并不是于平台数据表里面的id。所以,要再请求一次,查询id是否存在于数据库。



特别的是,输入这个东西没有id对应值的时候,value的值和text的值是相同的。

所以输入安这种情况,是没有id对应值的。$('#platform').combobox('getValue')此时不是数字,所以这种情况是这样排除的。

if(!(/^[+]?[1-9]+\d*$/i.test($('#platform').combobox('getValue')))){
	$.messager.alert("提示","请在下拉框中选择平台");
	return;
}else if(/^[+]?[1-9]+\d*$/i.test($('#platform').combobox('getValue'))){
	$.ajax({
		type: "GET",
		dataType: "text",
		url:"platformIDExist.action?platformid="+$('#platform').combobox('getValue'),
		success: function(data){
		data = $.trim(data);
		if(data == "false"){
			$.messager.alert("提示","该平台不存在!");
			return  ;
		}else{
			validatesuccess();
		}
			},
		error: function(){
			$.messager.alert("提示","网络连接失败!");
		}
	});
}


当输入360的时候,$('#platform').combobox('getValue')此时是数字,但是,数据库可能存在这个id。虽然这个有点多余,但是平台名称并不是全部都是文字。


将此id通过ajax再次请求,进行判断数据库是否存在然后返回值即可。

这样之后,可应对各种情况。


当输入平台名但是没输入完全或者没选中的时候,提示选择下拉框。

当输入平台名是数字但是又提交的时候,根据数字id在数据库中是否存在进行插入。


问题解决。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iaiti

赏顿早餐钱~

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

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

打赏作者

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

抵扣说明:

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

余额充值