(function ($) { $.extend(true, $.fn.combobox.defaults, { editable: true, filter: function (input, row) { // 清空内容, 则不过滤 if (!$.trim(input)) return true; input = input.toUpperCase(); // 先判断显示值 var opts = $(this).combobox('options'); var text = row[opts.textField].toUpperCase(); if (text.indexOf(input) >= 0) { return true; } var letter = pinyin ? pinyin.getCamelChars(text) : text; return (letter.indexOf(input) >= 0); }, onHidePanel: function () { var el = $(this); el.combobox('textbox').focus(); // 检查录入内容是否在数据里 var opts = el.combobox("options"); var data = el.combobox("getData"); var value = el.combobox("getValue"); // 有高亮选中的项目, 则不进一步处理 var panel = el.combobox("panel"); var items = panel.find(".combobox-item-selected"); if (items.length > 0) { var values = el.combobox("getValues"); el.combobox("setValues", values); return; } var allowInput = opts.allowInput; if (allowInput) { // 允许录入, 并且当前下拉没内容(过滤掉了), 则加入下拉列表里 var idx = data.length; data[idx] = []; data[idx][opts.textField] = value; data[idx][opts.valueField] = value; el.combobox("loadData", data); } else { // 不允许录入任意项, 则清空 el.combobox("clear"); if (el.combo("options").onSelect) { el.combo("options").onSelect.call(el, null); } } }, keyHandler: { query: function (q, evt) { var target = this; var el = $(this); var state = $.data(target, 'combobox'); var opts = state.options; if (opts.multiple && !q) { el.combobox("setValues", [], true); } else { el.combobox("setValues", [q], true); } var panel = el.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 = el.combobox('getData'); var vv = []; var qq = opts.multiple ? q.split(opts.separator) : [q]; $.map(qq, function (q) { q = $.trim(q); for (var i = 0; i < data.length; i++) { var row = data[i]; if (opts.filter.call(el, 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(); vv.push(row); } } }); // 默认高亮第一项 if (vv.length > 0 && q) { var v = vv[0][opts.valueField]; var item = opts.finder.getEl(target, v); item.addClass('combobox-item-selected'); // 只改value, 不改text el.combo("setValues", [v], true); if (el.combo("options").onSelect) { el.combo("options").onSelect.call(el, vv[0]); } } } } }); })(jQuery);