easyui的combobox 下拉框筛选自动填充扩展

项目需求:
鼠标不点击的时候就是文本框,鼠标点击进去才展示出下拉结果,在输入框里面输入了内容,下拉的结果自动刷新,可以光标点击选中某一条,如果没有点击选中,在光标移开的时候自动填充筛选结果的第一条数据。
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);
    }
})
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格式数据的接口,可以根据实际情况修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_28722935

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值