easy-ui中combobox多选框的bug
前言
最近在维护老项目的过程中,遇到了个问题,前端使用的easy-ui的组件,需要使用一个输入库可以下拉,可以搜索的功能,所以使用了combobox
这个组件,但是使用过程中发了个问题,就是我输入的字它居然当成了一个选项,导致出现各种问题
了解combobox
组合框(combobox)显示一个可编辑的文本框和下拉列表,用户可以从下拉列表中选择一个或多个值。用户可以直接输入文本到列表的顶部,或者从列表中选择一个或多个现成的值,具体使用方式参考
参考了官方的demo,发现官方demo也存在一样的问题,看来只能自己动手解决了,解决之前先来简单了解下combobox
这个组件的常用方法和事件
setValues
1 | $("#type").combobox('setValues', [1,2]) |
其中’setValues’是方法名,第二个是数组参数。还有单数形式的setValue
,是设置单个值的,我们这里是多选,所以这个不赘述
getValues
获取当前选中的所有项,返回是个id的数组
1 | $("#type").combobox("getValues") |
getData
获取当前下拉框中的所有项
1 | $("#type").combobox("getData") |
onSelect()
选中事件,只有下拉框中选中某项时,才会触发
1 | $("#iUserNameTree").combobox({ |
n是当前选中的那一项,是个object的,其中有id,有value
需要注意的是,只是选中,反选不是用这个,反选用unselect
,还有就是在事件里如果调用 getValues
的话,是获取不到本次选中的那条的,因为select事件是选中的那瞬间调用的
onChange()
改变事件,下拉框选中后触发事件,特别注意,输入框中输入的文字也会触发该事件,使用方式如下
1 | $("#iUserNameTree").combobox({ |
其中newValue是选中或输入后最新的数组,oldValue是上次的数组,这里的数组里仅仅是ID的数组,且这个事件是在改变后调用的,所以如果在这个事件里调用gatData是可以获取到最新的选中的数组的
思路
我试下下setvalues方法,可以改变输入框里的选项,可以把输入的那个替换掉!所以我的思路时,比如我输入了一个王,搜索到我要的数据后,选中了其中一个,这时首先会调用select事件,其次调用change事件,我需要在选中后的change事件里做下处理,判断下oldValue数组中最后一个是我输入的还是选中的,如果是输入的,就把它删掉,重新setvalues一下,就可以了
结语
这样可能还是有点问题的,因为我判断是输入的还是选中的,仅仅是查询data中是否包含这个id,所以如果输入数字查询,正好又包含这个,那就无法去除了,但是一般情况够用了,不过现在这个时代了,这种项目其实早应该淘汰了,别太纠结,一句话,能用就行