| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483 |
- /**
- * jQuery ligerUI 1.2.4
- *
- * http://ligerui.com
- *
- * Author daomi 2014 [ gd_star@163.com ]
- *
- */
- (function ($)
- {
- $.fn.ligerListBox = function (options)
- {
- return $.ligerui.run.call(this, "ligerListBox", arguments);
- };
- $.ligerDefaults.ListBox = {
- isMultiSelect: false, //是否多选
- isShowCheckBox: false, //是否选择复选框
- columns: null, //表格状态
- width: 150, //宽度
- height: 100, //高度
- onSelect: false, //选择前事件
- onSelected: null, //选择值事件
- valueField: 'id', //值成员
- textField: 'text', //显示成员
- valueFieldID: null, //值 隐藏域 表单名
- split: ";", //分隔符
- data: null, //数据
- parms: null, //ajax提交表单
- url: null, //数据源URL(需返回JSON)
- onSuccess: null,
- onError: null,
- render: null, //显示html自定义函数
- css: null, //附加css
- value: null, //值
- valueFieldCssClass: null
- };
- //扩展方法
- $.ligerMethos.ListBox = $.ligerMethos.ListBox || {};
- $.ligerui.controls.ListBox = function (element, options)
- {
- $.ligerui.controls.ListBox.base.constructor.call(this, element, options);
- };
- $.ligerui.controls.ListBox.ligerExtend($.ligerui.controls.Input, {
- __getType: function ()
- {
- return 'ListBox';
- },
- _extendMethods: function ()
- {
- return $.ligerMethos.ListBox;
- },
- _init: function ()
- {
- $.ligerui.controls.ListBox.base._init.call(this);
- },
- _render: function ()
- {
- var g = this, p = this.options;
- g.data = p.data;
- g.valueField = null; //隐藏域(保存值)
-
- if (p.valueFieldID)
- {
- g.valueField = $("#" + p.valueFieldID + ":input,[name=" + p.valueFieldID + "]:input");
- if (g.valueField.length == 0) g.valueField = $('<input type="hidden"/>');
- g.valueField[0].id = g.valueField[0].name = p.valueFieldID;
- }
- else
- {
- g.valueField = $('<input type="hidden"/>');
- g.valueField[0].id = g.valueField[0].name = g.id + "_val";
- }
- if (g.valueField[0].name == null) g.valueField[0].name = g.valueField[0].id;
- if (p.valueFieldCssClass)
- {
- g.valueField.addClass(p.valueFieldCssClass);
- }
- g.valueField.attr("data-ligerid", g.id);
- //选择框框
- g.selectBox = $(this.element);
- g.selectBox.html('<div class="l-listbox-inner"><table cellpadding="0" cellspacing="0" border="0" class="l-listbox-table"></table></div>').addClass("l-listbox").append(g.valueField);
- g.selectBox.table = $("table:first", g.selectBox);
-
- g.set(p);
- g._addClickEven();
- },
- destroy: function ()
- {
- if (this.selectBox) this.selectBox.remove();
- this.options = null;
- $.ligerui.remove(this);
- },
- clear : function()
- {
- this._changeValue("");
- this.trigger('clear');
- },
- _setIsShowCheckBox : function(value)
- {
- if (value)
- {
- $("table", this.selectBox).addClass("l-table-checkbox");
- } else
- {
- $("table", this.selectBox).addClass("l-table-nocheckbox");
- }
- },
- _setCss: function (css)
- {
- if (css)
- {
- this.selectBox.addClass(css);
- }
- },
- _setDisabled: function (value)
- {
- //禁用样式
- if (value)
- {
- this.selectBox.addClass('l-text-disabled');
- } else
- {
- this.selectBox.removeClass('l-text-disabled');
- }
- },
- _setWidth: function (value)
- {
- this.selectBox.width(value);
- },
- _setHeight: function (value)
- {
- this.selectBox.height(value);
- },
- //查找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;
- },
- getDataByValue: function (value)
- {
- var g = this, p = this.options;
- for (var i = 0, l = g.data.length; i < l; i++)
- {
- if (g.data[i][p.valueField] == value) return g.data[i];
- }
- return null;
- },
- indexOf: function (item)
- {
- var g = this, p = this.options;
- if (!g.data) return -1;
- var isObj = typeof (item) == "object";
- for (var i = 0, l = g.data.length; i < l; i++)
- {
- if (isObj)
- {
- if (g.data[i] == item) return i;
- } else
- {
- if (g.data[i][p.valueField] && g.data[i][p.valueField].toString() == item.toString()) return i;
- }
- }
- return -1;
- },
- removeItems : function(items)
- {
- var g = this;
- if (!g.data) return;
- $(items).each(function (i,item)
- {
- var index = g.indexOf(item);
- if (index == -1) return;
- g.data.splice(index, 1);
- });
- g.refresh();
- },
- removeItem: function (item)
- {
- if (!this.data) return;
- var index = this.indexOf(item);
- if (index == -1) return;
- this.data.splice(index, 1);
- this.refresh();
- },
- insertItem: function (item,index)
- {
- var g = this;
- if (!g.data) g.data = [];
- g.data.splice(index, 0, item);
- g.refresh();
- },
- addItems: function (items)
- {
- var g = this;
- if (!g.data) g.data = [];
- $(items).each(function (i, item)
- {
- g.data.push(item);
- });
- g.refresh();
- },
- addItem: function (item)
- {
- var g = this;
- if (!g.data) g.data = [];
- g.data.push(item);
- g.refresh();
- },
- getSelectedItems: function()
- {
- var g = this, p = this.options;
- if (!g.data) return null;
- var value = g.getValue();
- if (!value) return null;
- var items = [];
- $(value.split(p.split)).each(function ()
- {
- var index = g.indexOf(this.toString());
- if (index != -1) items.push(g.data[index]);
- });
- return items;
- },
- _setValue: function (value)
- {
- var g = this, p = this.options;
- p.value = value;
- this._dataInit();
- },
- setValue: function (value)
- {
- this._setValue(value);
- },
- _setUrl: function (url)
- {
- if (!url) return;
- var g = this, p = this.options;
- $.ajax({
- type: 'post',
- url: url,
- data: p.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("");
- },
- _setColumns : function(columns)
- {
- var g = this, p = this.options;
- p.columns = columns;
- g.refresh();
- },
- _setData : function(data)
- {
- this.setData(data);
- },
- setData: function (data)
- {
- var g = this, p = this.options;
- if (!data || !data.length) return;
- g.data = data;
- g.refresh();
- g.updateStyle();
- },
- refresh:function()
- {
- var g = this, p = this.options, data = this.data;
- this.clearContent();
- if (!data) return;
- if (p.columns)
- {
- g.selectBox.table.headrow = $("<tr class='l-table-headerow'><td width='18px' class='l-checkboxrow'></td></tr>");
- g.selectBox.table.append(g.selectBox.table.headrow);
- g.selectBox.table.addClass("l-listbox-grid");
- for (var j = 0; j < p.columns.length; j++)
- {
- var headrow = $("<td columnindex='" + j + "' columnname='" + p.columns[j].name + "'>" + p.columns[j].header + "</td>");
- if (p.columns[j].width)
- {
- headrow.width(p.columns[j].width);
- }
- g.selectBox.table.headrow.append(headrow);
- }
- }
- var out = [];
- for (var i = 0; i < data.length; i++)
- {
- var val = data[i][p.valueField];
- var txt = data[i][p.textField];
- var valueIndexStr = " value='" + val + "' index='" + i + "'";
- if (!p.columns)
- {
- out.push("<tr " + valueIndexStr + ">");
- out.push("<td style='width:18px;' class='l-checkboxrow'><input type='checkbox'" + valueIndexStr + "/></td>");
- var itemHtml = txt;
- if (p.render)
- {
- itemHtml = p.render({
- data: data[i],
- value: val,
- text: txt
- });
- }
- out.push("<td align='left'>" + itemHtml + "</td></tr>");
- } else
- {
- out.push("<tr " + valueIndexStr + "><td style='width:18px;' class='l-checkboxrow'><input type='checkbox' " + valueIndexStr + "/></td>");
- for (var j = 0; j < p.columns.length; j++)
- {
- var columnname = p.columns[j].name;
- out.push("<td>" + data[i][columnname] + "</td>");
- }
- out.push('</tr>');
- }
- }
- g.selectBox.table.append(out.join(''));
- },
- _getValue: function ()
- {
- return $(this.valueField).val();
- },
- getValue: function ()
- {
- //获取值
- return this._getValue();
- },
- updateStyle: function ()
- {
- this._dataInit();
- },
- selectAll: function ()
- {
- var g = this, p = this.options;
- var values = [];
- $("tr", g.selectBox).each(function ()
- {
- var jrow = $(this);
- values.push(jrow.attr("value"));
- });
- $("tr", g.selectBox).addClass("l-selected").find(":checkbox").each(function () { this.checked = true; });
- g.valueField.val(values.join(p.split));
- },
- _dataInit: function ()
- {
- var g = this, p = this.options;
- var value = p.value;
- //根据值来初始化
- if (value != null)
- {
- g._changeValue(value);
- }
- else if (g.valueField.val() != "")
- {
- p.value = g.valueField.val();
- }
- var valueArr = (value || "").toString().split(p.split);
- $("tr.l-selected", g.selectBox)
- .removeClass("l-selected")
- .find(":checkbox").each(function () { this.checked = false; });
- $(valueArr).each(function (i, item)
- {
- $("tr[value='" + item + "']", g.selectBox)
- .addClass("l-selected")
- .find(":checkbox").each(function () { this.checked = true; });
- });
- },
- //设置值到 隐藏域
- _changeValue: function (newValue)
- {
- var g = this, p = this.options;
- g.valueField.val(newValue);
- g.selectedValue = newValue;
- },
- //更新值到隐藏域
- _updateValue: function ()
- {
- var g = this, p = this.options;
- var values = [];
- $("tr", g.selectBox).each(function ()
- {
- var jrow = $(this);
- if (jrow.hasClass("l-selected"))
- {
- values.push(jrow.attr("value"));
- }
- });
- g._changeValue(values.join(p.split));
- },
- _addClickEven: function ()
- {
- var g = this, p = this.options;
- //选项点击
- g.selectBox.click(function (e)
- {
- var obj = (e.target || e.srcElement);
- var jrow = $(obj).parents("tr:first");
- if (!jrow.length) return;
- var value = jrow.attr("value");
- var text = g.findTextByValue(value), data = g.getDataByValue(value);
- if (g.hasBind('select'))
- {
- if (g.trigger('select', [value, text, data]) == false)
- {
- return false;
- }
- }
- if (!p.isMultiSelect)
- {
- $("tr.l-selected", g.selectBox).not(jrow)
- .removeClass("l-selected")
- .find(":checkbox").each(function () { this.checked = false });
- }
- if (jrow.hasClass("l-selected"))
- {
- jrow.removeClass("l-selected");
- } else
- {
- jrow.addClass("l-selected");
- }
- jrow.find(":checkbox").each(function () { this.checked = jrow.hasClass("l-selected"); });
- g._updateValue();
- g.trigger('selected', [value, text, data]);
- });
- }
- });
-
- })(jQuery);
|