项目需求:
鼠标不点击的时候就是文本框,鼠标点击进去才展示出下拉结果,在输入框里面输入了内容,下拉的结果自动刷新,可以光标点击选中某一条,如果没有点击选中,在光标移开的时候自动填充筛选结果的第一条数据。
easyui自带的filter可以添加按输入内容筛选,再加上光标blur事件可以实现自动填充结果筛选结果的第一条数据。
$('#testcombo').combobox({
data: comboData,
editable: true,
valueField: 'id',
textField: 'text',
required: true,
hasDownArrow: false,
panelHeight: 'auto',
filter: function(q, row) {
var opts = $(this).combobox('options');
return row[opts.textField].indexOf(q) == 0;
},
onSelect: function(rec) {},
events: {
blur: blurEvent
}
})
//easyui绑定blur事件
function blurEvent(e) {
var cc = $(this),
t = cc.parent('.combo').prev(),
opts = t.combobox('options'),
rows = t.combobox('getData'),
val = t.combobox('getText');
var going = true,
id;
$.each(rows, function(i, row) {
if(going && val && (row.text.indexOf(val) == 0 || row.spell && row.spell.indexOf(val) == 0)) {
id = row.id;
going = false;
}
})
if(id !== undefined)
t.combobox('select', id);
else t.combobox('clear');
}
combobox中的events事件有时不会触发,也可使用直接获取input元素绑定事件,但是如果是几个下拉框联动时,可能只有第一次有效,被触发一闪之后,下面联动的不会再有blur事件,未解决。
$('.easyui-combobox + .combo').children('input.textbox-text').on({
blur: function(e) {
var t = $(this),
box = t.parent('.combo').prev(),
val = t.val(),
opts = box.combobox('options'),
rows = box.combobox('getData');
var going = true,
id;
$.each(rows, function(i, row) {
if(going && val && row[opts.textField].indexOf(val) == 0) {
id = row[opts.valueField];
going = false;
}
})
box.combobox('setValue', id);
}
})