/** * jQuery ligerUI 1.2.4 * * http://ligerui.com * * Author daomi 2014 [ gd_star@163.com ] * */ (function ($) { $.fn.ligerComboBox = function (options) { return $.ligerui.run.call(this, "ligerComboBox", arguments); }; $.fn.ligerGetComboBoxManager = function () { return $.ligerui.run.call(this, "ligerGetComboBoxManager", arguments); }; $.ligerDefaults.ComboBox = { resize: true, //是否调整大小 isMultiSelect: false, //是否多选 isShowCheckBox: false, //是否选择复选框 columns: null, //表格状态 selectBoxWidth: null, //宽度 selectBoxHeight: 120, //高度 onBeforeSelect: false, //选择前事件 onSelected: null, //选择值事件 initValue: null, initText: null, valueField: 'id', textField: 'text', valueFieldID: null, slide: false, //是否以动画的形式显示 split: ";", data: null, tree: null, //下拉框以树的形式显示,tree的参数跟LigerTree的参数一致 treeLeafOnly: true, //是否只选择叶子 condition: null, //列表条件搜索 参数同 ligerForm grid: null, //表格 参数同 ligerGrid onStartResize: null, onEndResize: null, hideOnLoseFocus: true, hideGridOnLoseFocus : false, url: null, //数据源URL(需返回JSON) emptyText: null, //空行 addRowButton: '新增', //新增按钮 addRowButtonClick: null, //新增事件 triggerIcon : null, // onSuccess: null, onError: null, onBeforeOpen: null, //打开下拉框前事件,可以通过return false来阻止继续操作,利用这个参数可以用来调用其他函数,比如打开一个新窗口来选择值 onButtonClick: null, //右侧图标按钮事件,可以通过return false来阻止继续操作,利用这个参数可以用来调用其他函数,比如打开一个新窗口来选择值 render: null, //文本框显示html函数 absolute: true, //选择框是否在附加到body,并绝对定位 cancelable: true, //可取消选择 css: null, //附加css parms: null, //ajax提交表单 renderItem : null, //选项自定义函数 autocomplete: false, //自动完成 highLight : false, //自动完成是否匹配字符高亮显示 readonly: false, //是否只读 ajaxType: 'post', alwayShowInTop: false, //下拉框是否一直显示在上方 valueFieldCssClass : null }; $.ligerDefaults.ComboBoxString = { Search : "搜索" }; //扩展方法 $.ligerMethos.ComboBox = $.ligerMethos.ComboBox || {}; $.ligerui.controls.ComboBox = function (element, options) { $.ligerui.controls.ComboBox.base.constructor.call(this, element, options); }; $.ligerui.controls.ComboBox.ligerExtend($.ligerui.controls.Input, { __getType: function () { return 'ComboBox'; }, _extendMethods: function () { return $.ligerMethos.ComboBox; }, _init: function () { $.ligerui.controls.ComboBox.base._init.call(this); var p = this.options; if (p.columns) { p.isShowCheckBox = true; } if (p.isMultiSelect) { p.isShowCheckBox = true; } }, _render: function () { var g = this, p = this.options; g.data = p.data; g.inputText = null; g.select = null; g.textFieldID = ""; g.valueFieldID = ""; g.valueField = null; //隐藏域(保存值) //文本框初始化 if (this.element.tagName.toLowerCase() == "input") { this.element.readOnly = true; g.inputText = $(this.element); g.textFieldID = this.element.id; } else if (this.element.tagName.toLowerCase() == "select") { $(this.element).hide(); g.select = $(this.element); p.isMultiSelect = false; p.isShowCheckBox = false; p.cancelable = false; g.textFieldID = this.element.id + "_txt"; g.inputText = $(''); g.inputText.attr("id", g.textFieldID).insertAfter($(this.element)); } if (g.inputText[0].name == undefined) g.inputText[0].name = g.textFieldID; //隐藏域初始化 g.valueField = null; if (p.valueFieldID) { g.valueField = $("#" + p.valueFieldID + ":input,[name=" + p.valueFieldID + "]:input").filter("input:hidden"); if (g.valueField.length == 0) g.valueField = $(''); g.valueField[0].id = g.valueField[0].name = p.valueFieldID; } else { g.valueField = $(''); g.valueField[0].id = g.valueField[0].name = g.textFieldID + "_val"; } if (p.valueFieldCssClass) { g.valueField.addClass(p.valueFieldCssClass); } if (g.valueField[0].name == undefined) g.valueField[0].name = g.valueField[0].id; //update by superzoc 增加初始值 if (p.initValue != null) g.valueField[0].value = p.initValue; g.valueField.attr("data-ligerid", g.id); //开关 g.link = $('
'); if (p.triggerIcon) g.link.find("div:first").addClass(p.triggerIcon); //下拉框 g.selectBox = $(''); g.selectBox.table = $("table:first", g.selectBox); g.selectBoxInner = g.selectBox.find(".l-box-select-inner:first"); //外层 g.wrapper = g.inputText.wrap('
').parent(); g.wrapper.append('
'); g.wrapper.append(g.link); //添加个包裹, g.textwrapper = g.wrapper.wrap('
').parent(); if (p.absolute) g.selectBox.appendTo('body').addClass("l-box-select-absolute"); else g.textwrapper.append(g.selectBox); g.textwrapper.append(g.valueField); g.inputText.addClass("l-text-field"); if (p.isShowCheckBox && !g.select) { $("table", g.selectBox).addClass("l-table-checkbox"); } else { p.isShowCheckBox = false; $("table", g.selectBox).addClass("l-table-nocheckbox"); } //开关 事件 g.link.hover(function () { if (p.disabled || p.readonly) return; this.className = "l-trigger-hover"; }, function () { if (p.disabled || p.readonly) return; this.className = "l-trigger"; }).mousedown(function () { if (p.disabled || p.readonly) return; this.className = "l-trigger-pressed"; }).mouseup(function () { if (p.disabled || p.readonly) return; this.className = "l-trigger-hover"; }).click(function () { if (p.disabled || p.readonly) return; if (g.trigger('buttonClick') == false) return false; if (g.trigger('beforeOpen') == false) return false; g._toggleSelectBox(g.selectBox.is(":visible")); }); g.inputText.click(function () { if (p.disabled || p.readonly) return; if (g.trigger('beforeOpen') == false) return false; g._toggleSelectBox(g.selectBox.is(":visible")); }).blur(function () { if (p.disabled) return; g.wrapper.removeClass("l-text-focus"); }).focus(function () { if (p.disabled || p.readonly) return; g.wrapper.addClass("l-text-focus"); }); g.wrapper.hover(function () { if (p.disabled || p.readonly) return; g.wrapper.addClass("l-text-over"); }, function () { if (p.disabled || p.readonly) return; g.wrapper.removeClass("l-text-over"); }); g.resizing = false; g.selectBox.hover(null, function (e) { if (p.hideOnLoseFocus && g.selectBox.is(":visible") && !g.boxToggling && !g.resizing) { g._toggleSelectBox(true); } }); //下拉框内容初始化 g.bulidContent(); g.set(p); //下拉框宽度、高度初始化 if (p.selectBoxWidth) { g.selectBox.width(p.selectBoxWidth); } else { g.selectBox.css('width', g.wrapper.css('width')); } if (p.grid) { g.bind('show', function () { if (!g.grid) { g.setGrid(p.grid); g.set('SelectBoxHeight', p.selectBoxHeight); } }); } g.updateSelectBoxPosition(); $(document).bind("click.combobox", function (e) { var tag = (e.target || e.srcElement).tagName.toLowerCase(); if (tag == "html" || tag == "body") { g._toggleSelectBox(true); } }); }, destroy: function () { if (this.wrapper) this.wrapper.remove(); if (this.selectBox) this.selectBox.remove(); this.options = null; $.ligerui.remove(this); }, clear : function() { this._changeValue("", ""); $("a.l-checkbox-checked", this.selectBox).removeClass("l-checkbox-checked"); $("td.l-selected", this.selectBox).removeClass("l-selected"); $(":checkbox", this.selectBox).each(function () { this.checked = false; }); this.trigger('clear'); }, _setSelectBoxHeight: function (height) { if (!height) return; var g = this, p = this.options; if (p.grid) { g.grid && g.grid.set('height', g.getGridHeight(height)); } else { var itemsleng = $("tr", g.selectBox.table).length; if (!p.selectBoxHeight && itemsleng < 8) p.selectBoxHeight = itemsleng * 30; if (p.selectBoxHeight) { if (itemsleng < 8) { g.selectBoxInner.height('auto'); } else { g.selectBoxInner.height(p.selectBoxHeight); } } } }, _setCss : function(css) { if (css) { this.wrapper.addClass(css); } }, //取消选择 _setCancelable: function (value) { var g = this, p = this.options; if (!value && g.unselect) { g.unselect.remove(); g.unselect = null; } if (!value && !g.unselect) return; g.unselect = $('
').hide(); g.wrapper.hover(function () { g.unselect.show(); }, function () { g.unselect.hide(); }) if (!p.disabled && !p.readonly && p.cancelable) { g.wrapper.append(g.unselect); } g.unselect.hover(function () { this.className = "l-trigger-hover l-trigger-cancel"; }, function () { this.className = "l-trigger l-trigger-cancel"; }).click(function () { g.clear(); }); }, _setDisabled: function (value) { //禁用样式 if (value) { this.wrapper.addClass('l-text-disabled'); } else { this.wrapper.removeClass('l-text-disabled'); } }, _setReadonly: function (readonly) { if (readonly) { this.wrapper.addClass("l-text-readonly"); } else { this.wrapper.removeClass("l-text-readonly"); } }, _setLable: function (label) { var g = this, p = this.options; if (label) { if (g.labelwrapper) { g.labelwrapper.find(".l-text-label:first").html(label + ': '); } else { g.labelwrapper = g.textwrapper.wrap('
').parent(); g.labelwrapper.prepend('
' + label + ': 
'); g.textwrapper.css('float', 'left'); } if (!p.labelWidth) { p.labelWidth = $('.l-text-label', g.labelwrapper).outerWidth(); } else { $('.l-text-label', g.labelwrapper).outerWidth(p.labelWidth); } $('.l-text-label', g.labelwrapper).width(p.labelWidth); $('.l-text-label', g.labelwrapper).height(g.wrapper.height()); g.labelwrapper.append('
'); if (p.labelAlign) { $('.l-text-label', g.labelwrapper).css('text-align', p.labelAlign); } g.textwrapper.css({ display: 'inline' }); g.labelwrapper.width(g.wrapper.outerWidth() + p.labelWidth + 2); } }, _setWidth: function (value) { var g = this, p = this.options; if (value > 20) { g.wrapper.css({ width: value }); g.inputText.css({ width: value - 20 }); if (!p.selectBoxWidth) { g.selectBox.css({ width: value }); } } }, _setHeight: function (value) { var g = this; if (value > 10) { g.wrapper.height(value); g.inputText.height(value - 2); } }, _setResize: function (resize) { var g = this, p = this.options; if (p.columns) { return; } //调整大小支持 if (resize && $.fn.ligerResizable) { var handles = p.selectBoxHeight ? 'e' : 'se,s,e'; g.selectBox.ligerResizable({ handles: handles, onStartResize: function () { g.resizing = true; g.trigger('startResize'); }, onEndResize: function () { g.resizing = false; if (g.trigger('endResize') == false) return false; }, onStopResize: function (current, e) { if (g.grid) { if (current.newWidth) { g.selectBox.width(current.newWidth); } if (current.newHeight) { g.set({ selectBoxHeight: current.newHeight }); } g.grid.refreshSize(); g.trigger('endResize'); return false; } return true; } }); g.selectBox.append("
"); } }, //查找Text,适用多选和单选 findTextByValue: function (value) { var g = this, p = this.options; if (value == null) return ""; var texts = ""; var contain = function (checkvalue) { var targetdata = value.toString().split(p.split); for (var i = 0; i < targetdata.length; i++) { if (targetdata[i] == checkvalue) return true; } return false; }; $(g.data).each(function (i, item) { var val = item[p.valueField]; var txt = item[p.textField]; if (contain(val)) { texts += txt + p.split; } }); if (texts.length > 0) texts = texts.substr(0, texts.length - 1); return texts; }, //查找Value,适用多选和单选 findValueByText: function (text) { var g = this, p = this.options; if (!text && text == "") return ""; var contain = function (checkvalue) { var targetdata = text.toString().split(p.split); for (var i = 0; i < targetdata.length; i++) { if (targetdata[i] == checkvalue) return true; } return false; }; var values = ""; $(g.data).each(function (i, item) { var val = item[p.valueField]; var txt = item[p.textField]; if (contain(txt)) { values += val + p.split; } }); if (values.length > 0) values = values.substr(0, values.length - 1); return values; }, insertItem: function (data,index) { var g = this, p = this.options; g.data = g.data || []; g.data.splice(index, 0, data); g.setData(g.data); }, addItem: function (data) { var g = this, p = this.options; g.insertItem(data, (g.data || []).length); }, _setValue: function (value,text) { var g = this, p = this.options; text = g.findTextByValue(value); if (p.tree) { g.selectValueByTree(value); } else if (!p.isMultiSelect) { g._changeValue(value, text); $("tr[value='" + value + "'] td", g.selectBox).addClass("l-selected"); $("tr[value!='" + value + "'] td", g.selectBox).removeClass("l-selected"); } else { g._changeValue(value, text); if (value != null) { var targetdata = value.toString().split(p.split); $("table.l-table-checkbox :checkbox", g.selectBox).each(function () { this.checked = false; }); for (var i = 0; i < targetdata.length; i++) { $("table.l-table-checkbox tr[value=" + targetdata[i] + "] :checkbox", g.selectBox).each(function () { this.checked = true; }); } } } }, selectValue: function (value) { this._setValue(value); }, bulidContent: function () { var g = this, p = this.options; this.clearContent(); if (g.select) { g.setSelect(); } else if (p.tree) { g.setTree(p.tree); } }, reload: function () { var g = this, p = this.options; if (p.url) { g.set('url', p.url); } else if (g.grid) { g.grid.reload(); } }, _setUrl: function (url) { if (!url) return; var g = this, p = this.options; var parms = $.isFunction(p.parms) ? p.parms() : p.parms; $.ajax({ type: p.ajaxType, url: url, data: parms, cache: false, dataType: 'json', success: function (data) { g.setData(data); g.trigger('success', [data]); }, error: function (XMLHttpRequest, textStatus) { g.trigger('error', [XMLHttpRequest, textStatus]); } }); }, setUrl: function (url) { return this._setUrl(url); }, setParm: function (name, value) { if (!name) return; var g = this; var parms = g.get('parms'); if (!parms) parms = {}; parms[name] = value; g.set('parms', parms); }, clearContent: function () { var g = this, p = this.options; $("table", g.selectBox).html(""); //g.inputText.val(""); //g.valueField.val(""); }, setSelect: function () { var g = this, p = this.options; this.clearContent(); $('option', g.select).each(function (i) { var val = $(this).val(); var txt = $(this).html(); var tr = $("" + txt + ""); $("table.l-table-nocheckbox", g.selectBox).append(tr); $("td", tr).hover(function () { $(this).addClass("l-over"); }, function () { $(this).removeClass("l-over"); }); }); $('td:eq(' + g.select[0].selectedIndex + ')', g.selectBox).each(function () { if ($(this).hasClass("l-selected")) { g.selectBox.hide(); return; } $(".l-selected", g.selectBox).removeClass("l-selected"); $(this).addClass("l-selected"); if (g.select[0].selectedIndex != $(this).attr('index') && g.select[0].onchange) { g.select[0].selectedIndex = $(this).attr('index'); g.select[0].onchange(); } var newIndex = parseInt($(this).attr('index')); g.select[0].selectedIndex = newIndex; g.select.trigger("change"); g.selectBox.hide(); var value = $(this).attr("value"); var text = $(this).html(); if (p.render) { g.inputText.val(p.render(value, text)); } else { g.inputText.val(text); } }); g._addClickEven(); }, _setData : function(data) { this.setData(data); }, setData: function (data) { var g = this, p = this.options; if (g.select) return; if (!data || !data.length) data = []; if (g.data != data) g.data = data; this.clearContent(); if (p.columns) { g.selectBox.table.headrow = $(""); g.selectBox.table.append(g.selectBox.table.headrow); g.selectBox.table.addClass("l-box-select-grid"); for (var j = 0; j < p.columns.length; j++) { var headrow = $("" + p.columns[j].header + ""); if (p.columns[j].width) { headrow.width(p.columns[j].width); } g.selectBox.table.headrow.append(headrow); } } var out = []; if (p.emptyText && !g.emptyRow && (data.length == 0 || data[0][p.textField] != p.emptyText)) { g.emptyRow = {}; g.emptyRow[p.textField] = p.emptyText; g.emptyRow[p.valueField] = null; data.splice(0, 0, g.emptyRow); } for (var i = 0; i < data.length; i++) { var val = data[i][p.valueField]; var txt = data[i][p.textField]; if (!p.columns) { out.push(""); if(p.isShowCheckBox){ out.push(""); } var itemHtml = txt; if (p.renderItem) { itemHtml = p.renderItem.call(g, { data: data[i], value: val, text: txt, key: g.inputText.val() }); } else if (p.autocomplete && p.highLight) { itemHtml = g._highLight(txt, g.inputText.val()); } out.push("" + itemHtml + ""); } else { out.push(""); for (var j = 0; j < p.columns.length; j++) { var columnname = p.columns[j].name; out.push("" + data[i][columnname] + ""); } out.push(''); } } if (!p.columns) { if (p.isShowCheckBox) { $("table.l-table-checkbox", g.selectBox).append(out.join('')); }else{ $("table.l-table-nocheckbox", g.selectBox).append(out.join('')); } } else { g.selectBox.table.append(out.join('')); } if (p.addRowButton && p.addRowButtonClick && !g.addRowButton) { g.addRowButton = $('
'); g.addRowButton.find(".link").append(p.addRowButton).click(p.addRowButtonClick); g.selectBoxInner.after(g.addRowButton); } g.set('selectBoxHeight', p.selectBoxHeight); //自定义复选框支持 if (p.isShowCheckBox && $.fn.ligerCheckBox) { $("table input:checkbox", g.selectBox).ligerCheckBox(); } $(".l-table-checkbox input:checkbox", g.selectBox).change(function () { if (this.checked && g.hasBind('beforeSelect')) { var parentTD = null; if ($(this).parent().get(0).tagName.toLowerCase() == "div") { parentTD = $(this).parent().parent(); } else { parentTD = $(this).parent(); } if (parentTD != null && g.trigger('beforeSelect', [parentTD.attr("value"), parentTD.attr("text")]) == false) { g.selectBox.slideToggle("fast"); return false; } } if (!p.isMultiSelect) { if (this.checked) { $("input:checked", g.selectBox).not(this).each(function () { this.checked = false; $(".l-checkbox-checked", $(this).parent()).removeClass("l-checkbox-checked"); }); g.selectBox.slideToggle("fast"); } } g._checkboxUpdateValue(); }); $("table.l-table-nocheckbox td", g.selectBox).hover(function () { $(this).addClass("l-over"); }, function () { $(this).removeClass("l-over"); }); g._addClickEven(); //选择项初始化 if (!p.autocomplete) { g.updateStyle(); } }, //树 setTree: function (tree) { var g = this, p = this.options; this.clearContent(); g.selectBox.table.remove(); if (tree.checkbox != false) { tree.onCheck = function () { var nodes = g.treeManager.getChecked(); var value = []; var text = []; $(nodes).each(function (i, node) { if (p.treeLeafOnly && node.data.children) return; value.push(node.data[p.valueField]); text.push(node.data[p.textField]); }); g._changeValue(value.join(p.split), text.join(p.split)); }; } else { tree.onSelect = function (node) { if (g.trigger('BeforeSelect'[node]) == false) return; if (p.treeLeafOnly && node.data.children) return; var value = node.data[p.valueField]; var text = node.data[p.textField]; g._changeValue(value, text); }; tree.onCancelSelect = function (node) { g._changeValue("", ""); }; } tree.onAfterAppend = function (domnode, nodedata) { if (!g.treeManager) return; var value = null; if (p.initValue) value = p.initValue; else if (g.valueField.val() != "") value = g.valueField.val(); g.selectValueByTree(value); }; g.tree = $(""); $("div:first", g.selectBox).append(g.tree); g.tree.ligerTree(tree); g.treeManager = g.tree.ligerGetTreeManager(); }, selectValueByTree: function (value) { var g = this, p = this.options; if (value != null) { var text = ""; var valuelist = value.toString().split(p.split); $(valuelist).each(function (i, item) { g.treeManager.selectNode(item.toString()); text += g.treeManager.getTextByID(item); if (i < valuelist.length - 1) text += p.split; }); g._changeValue(value, text); } }, //表格 setGrid: function (grid) { var g = this, p = this.options; if (g.grid) return; p.hideOnLoseFocus = p.hideGridOnLoseFocus ? true : false; this.clearContent(); g.selectBox.addClass("l-box-select-lookup"); g.selectBox.table.remove(); var panel = $("div:first", g.selectBox); var conditionPanel = $("
").appendTo(panel); var gridPanel = $("
").appendTo(panel); g.conditionPanel = conditionPanel; //搜索框 if (p.condition) { var conditionParm = $.extend({ labelWidth: 60, space: 20, width: p.selectBoxWidth }, p.condition); g.condition = conditionPanel.ligerForm(conditionParm); } else { conditionPanel.remove(); } //列表 grid = $.extend({ columnWidth: 120, alternatingRow: false, frozen: true, rownumbers: true, allowUnSelectRow:true }, grid, { width: "100%", height: g.getGridHeight(), inWindow: false, parms : p.parms, isChecked: function (rowdata) { var value = g.getValue(); if (!value) return false; if (!p.valueField || !rowdata[p.valueField]) return false; return $.inArray(rowdata[p.valueField].toString(), value.split(p.split)) != -1; } }); g.grid = g.gridManager = gridPanel.ligerGrid(grid); g.grid.bind('afterShowData', function () { g.updateSelectBoxPosition(); }); var selecteds = [], onGridSelect = function () { var value = [], text = []; $(selecteds).each(function (i, rowdata) { value.push(rowdata[p.valueField]); text.push(rowdata[p.textField]); }); if (grid.checkbox) g.selected = selecteds; else if (selecteds.length) g.selected = selecteds[0]; else g.selected = null; g._changeValue(value.join(p.split), text.join(p.split)); g.trigger('gridSelect', { value: value.join(p.split), text: text.join(p.split), data: selecteds }); }, removeSelected = function (rowdata) { for (var i = selecteds.length - 1; i >= 0; i--) { if (selecteds[i][p.valueField] == rowdata[p.valueField]) { selecteds.splice(i, 1); } } }, addSelected = function (rowdata) { for (var i = selecteds.length - 1; i >= 0; i--) { if (selecteds[i][p.valueField] == rowdata[p.valueField]) { return; } } selecteds.push(rowdata); }; if (grid.checkbox) { var onCheckRow = function (checked, rowdata) { checked && addSelected(rowdata); !checked && removeSelected(rowdata); }; g.grid.bind('CheckAllRow', function (checked) { $(g.grid.rows).each(function (rowdata) { onCheckRow(checked, rowdata); }); onGridSelect(); }); g.grid.bind('CheckRow', function (checked, rowdata) { onCheckRow(checked, rowdata); onGridSelect(); }); } else { g.grid.bind('SelectRow', function (rowdata) { selecteds = [rowdata]; onGridSelect(); g._toggleSelectBox(true); }); g.grid.bind('UnSelectRow', function () { selecteds = []; onGridSelect(); }); } g.bind('show', function () { g.grid.refreshSize(); }); g.bind("clear", function () { selecteds = []; g.grid.selecteds = []; g.grid._showData(); }); if (p.condition) { var containerBtn1 = $('
  • '); var containerBtn2 = $('
  • '); $("ul:first", conditionPanel).append(containerBtn1).append(containerBtn2).after('
    '); $("div", containerBtn1).ligerButton({ text: p.Search, width: 40, click: function () { var rules = g.condition.toConditions(); g.grid.setParm(grid.conditionParmName || 'condition', $.ligerui.toJSON(rules)); g.grid.reload(); } }); $("div", containerBtn2).ligerButton({ text: '关闭',width:40, click: function () { g.selectBox.hide(); } }); } g.grid.refreshSize(); }, getGridHeight: function (height) { var g = this, p = this.options; height = height || g.selectBox.height(); height -= g.conditionPanel.height(); return height; }, _getValue: function () { return $(this.valueField).val(); }, getValue: function () { //获取值 return this._getValue(); }, getSelected : function() { return this.selected; }, getText: function () { return this.inputText.val(); }, setText: function (value) { this.inputText.val(value); }, updateStyle: function () { var g = this, p = this.options; p.initValue = g._getValue(); g._dataInit(); }, _dataInit: function () { var g = this, p = this.options; var value = null; if (p.initValue != null && p.initText != null) { g._changeValue(p.initValue, p.initText); } //根据值来初始化 if (p.initValue != null) { value = p.initValue; if (p.tree) { if(value) g.selectValueByTree(value); } else if (g.data) { var text = g.findTextByValue(value); g._changeValue(value, text); } } else if (g.valueField.val() != "") { value = g.valueField.val(); if (p.tree) { if(value) g.selectValueByTree(value); } else if(g.data) { var text = g.findTextByValue(value); g._changeValue(value, text); } } if (!p.isShowCheckBox) { $("table tr", g.selectBox).find("td:first").each(function () { if (value != null && value == $(this).attr("value")) { $(this).addClass("l-selected"); } else { $(this).removeClass("l-selected"); } }); } else { $(":checkbox", g.selectBox).each(function () { var parentTD = null; var checkbox = $(this); if (checkbox.parent().get(0).tagName.toLowerCase() == "div") { parentTD = checkbox.parent().parent(); } else { parentTD = checkbox.parent(); } if (parentTD == null) return; $(".l-checkbox", parentTD).removeClass("l-checkbox-checked"); checkbox[0].checked = false; var valuearr = (value || "").toString().split(p.split); $(valuearr).each(function (i, item) { if (value != null && item == parentTD.attr("value")) { $(".l-checkbox", parentTD).addClass("l-checkbox-checked"); checkbox[0].checked = true; } }); }); } }, //设置值到 文本框和隐藏域 _changeValue: function (newValue, newText) { var g = this, p = this.options; g.valueField.val(newValue); if (p && p.render) { g.inputText.val(p.render(newValue, newText)); } else { g.inputText.val(newText); } g.selectedValue = newValue; g.selectedText = newText; g.inputText.trigger("change").focus(); g.trigger('selected', [newValue, newText]); }, //更新选中的值(复选框) _checkboxUpdateValue: function () { var g = this, p = this.options; var valueStr = ""; var textStr = ""; $("input:checked", g.selectBox).each(function () { var parentTD = null; if ($(this).parent().get(0).tagName.toLowerCase() == "div") { parentTD = $(this).parent().parent(); } else { parentTD = $(this).parent(); } if (!parentTD) return; valueStr += parentTD.attr("value") + p.split; textStr += parentTD.attr("text") + p.split; }); if (valueStr.length > 0) valueStr = valueStr.substr(0, valueStr.length - 1); if (textStr.length > 0) textStr = textStr.substr(0, textStr.length - 1); g._changeValue(valueStr, textStr); }, _addClickEven: function () { var g = this, p = this.options; //选项点击 $(".l-table-nocheckbox td", g.selectBox).click(function () { var value = $(this).attr("value"); var index = parseInt($(this).attr('index')); var text = $(this).attr("text"); if (g.hasBind('beforeSelect') && g.trigger('beforeSelect', [value, text]) == false) { if (p.slide) g.selectBox.slideToggle("fast"); else g.selectBox.hide(); return false; } if ($(this).hasClass("l-selected")) { if (p.slide) g.selectBox.slideToggle("fast"); else g.selectBox.hide(); return; } $(".l-selected", g.selectBox).removeClass("l-selected"); $(this).addClass("l-selected"); if (g.select) { if (g.select[0].selectedIndex != index) { g.select[0].selectedIndex = index; g.select.trigger("change"); } } if (p.slide) { g.boxToggling = true; g.selectBox.hide("fast", function () { g.boxToggling = false; }) } else g.selectBox.hide(); g._changeValue(value, text); }); }, updateSelectBoxPosition: function () { var g = this, p = this.options; if (p && p.absolute) { var contentHeight = $(document).height(); if (p.alwayShowInTop || Number(g.wrapper.offset().top + 1 + g.wrapper.outerHeight() + g.selectBox.height()) > contentHeight && contentHeight > Number(g.selectBox.height() + 1)) { //若下拉框大小超过当前document下边框,且当前document上留白大于下拉内容高度,下拉内容向上展现 g.selectBox.css({ left: g.wrapper.offset().left, top: g.wrapper.offset().top - 1 - g.selectBox.height() }); } else { g.selectBox.css({ left: g.wrapper.offset().left, top: g.wrapper.offset().top + 1 + g.wrapper.outerHeight() }); } } else { var topheight = g.wrapper.offset().top - $(window).scrollTop(); var selfheight = g.selectBox.height() + textHeight + 4; if (topheight + selfheight > $(window).height() && topheight > selfheight) { g.selectBox.css("marginTop", -1 * (g.selectBox.height() + textHeight + 5)); } } }, _toggleSelectBox: function (isHide) { var g = this, p = this.options; if (!g || !p) return; var textHeight = g.wrapper.height(); g.boxToggling = true; if (isHide) { if (p.slide) { g.selectBox.slideToggle('fast', function () { g.boxToggling = false; }); } else { g.selectBox.hide(); g.boxToggling = false; } } else { g.updateSelectBoxPosition(); if (p.slide) { g.selectBox.slideToggle('fast', function () { g.boxToggling = false; if (!p.isShowCheckBox && $('td.l-selected', g.selectBox).length > 0) { var offSet = ($('td.l-selected', g.selectBox).offset().top - g.selectBox.offset().top); $(".l-box-select-inner", g.selectBox).animate({ scrollTop: offSet }); } }); } else { g.selectBox.show(); g.boxToggling = false; if (!g.tree && !g.grid && !p.isShowCheckBox && $('td.l-selected', g.selectBox).length > 0) { var offSet = ($('td.l-selected', g.selectBox).offset().top - g.selectBox.offset().top); $(".l-box-select-inner", g.selectBox).animate({ scrollTop: offSet }); } } } g.isShowed = g.selectBox.is(":visible"); g.trigger('toggle', [isHide]); g.trigger(isHide ? 'hide' : 'show'); }, _highLight: function (str, key) { if (!str) return str; var index = str.indexOf(key); if (index == -1) return str; return str.substring(0, index) + "" + key + "" + str.substring(key.length + index); }, _setAutocomplete: function (value) { var g = this, p = this.options; if (!value) return; g.inputText.removeAttr("readonly"); var lastText = g.inputText.val(); g.inputText.keyup(function () { setTimeout(function () { if (lastText == g.inputText.val()) return; p.initValue = ""; g.valueField.val(""); if (p.url) { g.setParm('key', g.inputText.val()); g.set('url', p.url); g.selectBox.show(); } else if (p.grid) { g.grid.setParm('key', g.inputText.val()); g.grid.reload(); } lastText = g.inputText.val(); }, 1); }); } }); $.ligerui.controls.ComboBox.prototype.setValue = $.ligerui.controls.ComboBox.prototype.selectValue; //设置文本框和隐藏控件的值 $.ligerui.controls.ComboBox.prototype.setInputValue = $.ligerui.controls.ComboBox.prototype._changeValue; })(jQuery);