EasyUI Forum

General Category => EasyUI for jQuery => Topic started by: devnull on June 02, 2015, 08:08:58 PM



Title: combobox does not select when typing value & using enter key
Post by: devnull on June 02, 2015, 08:08:58 PM
http://jsfiddle.net/seKvb/53/

If you select the combobox text field, type "one" on your keyboard and then press enter the record does not get selected.

I have tried with both selectOnNavigation:false and selectOnNavigation:true neither appears to work

How can I achieve this functionality ?



Title: Re: combobox does not select when typing value & using enter key
Post by: stworthy on June 03, 2015, 12:51:46 AM
Please use the 'onChange' event instead, or download the patch from http://www.jeasyui.com/download/downloads/jquery-easyui-1.4.2-patch.zip.


Title: Re: combobox does not select when typing value & using enter key
Post by: devnull on June 03, 2015, 02:31:45 AM
Can't use the onchange even as it fires on every keydown, what I want it to do is only fire when the enter key is pressed.

Thanks, but I am not running 1.4.2 as it breaks all of the work-arounds and hacks that I have implemented.

Which part of the patches code specifically deals with this event ?

Thanks


Title: Re: combobox does not select when typing value & using enter key
Post by: stworthy on June 03, 2015, 07:47:33 AM
Please try this code.
Code:
(function($){
        function setValues(target, values, remainText){
                var opts = $.data(target, 'combobox').options;
                var panel = $(target).combo('panel');
               
                if (!$.isArray(values)){values = values.split(opts.separator)}
                panel.find('div.combobox-item-selected').removeClass('combobox-item-selected');
                var vv = [], ss = [];
                for(var i=0; i<values.length; i++){
                        var v = values[i];
                        var s = v;
                        opts.finder.getEl(target, v).addClass('combobox-item-selected');
                        var row = opts.finder.getRow(target, v);
                        if (row){
                                s = row[opts.textField];
                        }
                        vv.push(v);
                        ss.push(s);
                }
               
                if (!remainText){
                        $(target).combo('setText', ss.join(opts.separator));
                }
                $(target).combo('setValues', vv);
        }

        function doQuery(target, q){
                var state = $.data(target, 'combobox');
                var opts = state.options;
               
                var qq = opts.multiple ? q.split(opts.separator) : [q];
                var panel = $(target).combo('panel');
                panel.find('div.combobox-item-selected,div.combobox-item-hover').removeClass('combobox-item-selected combobox-item-hover');
                panel.find('div.combobox-item,div.combobox-group').hide();
                var data = state.data;
                var vv = [];
                $.map(qq, function(q){
                        q = $.trim(q);
                        var value = q;
                        var group = undefined;
                        for(var i=0; i<data.length; i++){
                                var row = data[i];
                                if (opts.filter.call(target, q, row)){
                                        var v = row[opts.valueField];
                                        var s = row[opts.textField];
                                        var g = row[opts.groupField];
                                        var item = opts.finder.getEl(target, v).show();
                                        if (s.toLowerCase() == q.toLowerCase()){
                                                value = v;
                                                item.addClass('combobox-item-selected');
                                                opts.onSelect.call(target, row);
                                        }
                                        if (opts.groupField && group != g){
                                                $('#'+state.groupIdPrefix+'_'+$.inArray(g, state.groups)).show();
                                                group = g;
                                        }
                                }
                        }
                        vv.push(value);
                });
                _setValues(vv);

                function _setValues(vv){
                        setValues(target, opts.multiple ? (q?vv:[]) : vv, true);
                }
        }

        var query = $.fn.combobox.defaults.keyHandler.query;
        $.fn.combobox.defaults.keyHandler.query = function(q,e){
                var opts = $(this).combobox('options');
                if (opts.mode == 'remote'){
                        query.call(this, q, e);
                } else {
                        doQuery(this, q);
                }
        }
})(jQuery);