123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- (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);
|