/** * jQuery ligerUI 1.2.4 * * http://ligerui.com * * Author daomi 2014 [ gd_star@163.com ] * */ (function ($) { $.fn.ligerTextBox = function () { return $.ligerui.run.call(this, "ligerTextBox", arguments); }; $.fn.ligerGetTextBoxManager = function () { return $.ligerui.run.call(this, "ligerGetTextBoxManager", arguments); }; $.ligerDefaults.TextBox = { onChangeValue: null, onMouseOver: null, onMouseOut: null, onBlur: null, onFocus: null, width: null, disabled: false, value: null, //初始化值 nullText: null, //不能为空时的提示 digits: false, //是否限定为数字输入框 number: false, //是否限定为浮点数格式输入框 currency: false, //是否显示为货币形式 readonly: false //是否只读 }; $.ligerui.controls.TextBox = function (element, options) { $.ligerui.controls.TextBox.base.constructor.call(this, element, options); }; $.ligerui.controls.TextBox.ligerExtend($.ligerui.controls.Input, { __getType: function () { return 'TextBox' }, __idPrev: function () { return 'TextBox'; }, _init: function () { $.ligerui.controls.TextBox.base._init.call(this); var g = this, p = this.options; if (!p.width) { p.width = $(g.element).width(); } if ($(this.element).attr("readonly")) { p.readonly = true; } else if (p.readonly) { $(this.element).attr("readonly", true); } }, _render: function () { var g = this, p = this.options; g.inputText = $(this.element); //外层 g.wrapper = g.inputText.wrap('
').parent(); g.wrapper.append('
'); if (!g.inputText.hasClass("l-text-field")) g.inputText.addClass("l-text-field"); this._setEvent(); if (p.digits || p.number || p.currency) { g.inputText.addClass("l-text-field-number"); } g.set(p); g.checkValue(); }, destroy: function () { var g = this; if (g.wrapper) { g.wrapper.remove(); } g.options = null; liger.remove(this); }, _getValue: function () { return this.inputText.val(); }, _setNullText: function () { this.checkNotNull(); }, checkValue: function () { var g = this, p = this.options; var v = g.inputText.val() || ""; if (p.currency) v = v.replace(/\$|\,/g, ''); var isFloat = p.number || p.currency, isDigits = p.digits; if (v != "" && isFloat && !/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(v) || isDigits && !/^\d+$/.test(v)) { if (g.value != null) { //不符合,恢复到原来的值 g.inputText.val(g.value); } else { g.inputText.val(''); } p.currency && g.inputText.val(currencyFormatter(g.value)); return; } g.value = v; p.currency && g.inputText.val(currencyFormatter(g.value)); }, checkNotNull: function () { var g = this, p = this.options; if (p.nullText && !p.disabled) { if (!g.inputText.val()) { g.inputText.addClass("l-text-field-null").val(p.nullText); } } }, _setEvent: function () { var g = this, p = this.options; g.inputText.bind('blur.textBox', function () { g.trigger('blur'); g.checkNotNull(); g.checkValue(); g.wrapper.removeClass("l-text-focus"); }).bind('focus.textBox', function () { g.trigger('focus'); if (p.nullText) { if ($(this).hasClass("l-text-field-null")) { $(this).removeClass("l-text-field-null").val(""); } } g.wrapper.addClass("l-text-focus"); }) .change(function () { g.trigger('changeValue', [this.value]); }); g.wrapper.hover(function () { g.trigger('mouseOver'); g.wrapper.addClass("l-text-over"); }, function () { g.trigger('mouseOut'); g.wrapper.removeClass("l-text-over"); }); }, _setDisabled: function (value) { var g = this, p = this.options; if (value) { this.inputText.attr("readonly", "readonly"); this.wrapper.addClass("l-text-disabled"); } else if (!p.readonly) { this.inputText.removeAttr("readonly"); this.wrapper.removeClass('l-text-disabled'); } }, _setWidth: function (value) { if (value > 20) { this.wrapper.css({ width: value }); this.inputText.css({ width: value - 4 }); } }, _setHeight: function (value) { if (value > 10) { this.wrapper.height(value); this.inputText.height(value - 2); } }, _setValue: function (value) { if (value != null) this.inputText.val(value); }, _setLabel: function (value) { var g = this, p = this.options; if (!g.labelwrapper) { g.labelwrapper = g.wrapper.wrap('
').parent(); var lable = $('
' + value + ': 
'); g.labelwrapper.prepend(lable); g.wrapper.css('float', 'left'); if (!p.labelWidth) { p.labelWidth = lable.width(); } else { g._setLabelWidth(p.labelWidth); } lable.height(g.wrapper.height()); if (p.labelAlign) { g._setLabelAlign(p.labelAlign); } g.labelwrapper.append('
'); g.labelwrapper.width(p.labelWidth + p.width + 2); } else { g.labelwrapper.find(".l-text-label").html(value + ': '); } }, _setLabelWidth: function (value) { var g = this, p = this.options; if (!g.labelwrapper) return; g.labelwrapper.find(".l-text-label").width(value); }, _setLabelAlign: function (value) { var g = this, p = this.options; if (!g.labelwrapper) return; g.labelwrapper.find(".l-text-label").css('text-align', value); }, updateStyle: function () { var g = this, p = this.options; if (g.inputText.attr('readonly')) { g.wrapper.addClass("l-text-readonly"); p.disabled = true; } else { g.wrapper.removeClass("l-text-readonly"); p.disabled = false; } if (g.inputText.attr('disabled')) { g.wrapper.addClass("l-text-disabled"); p.disabled = true; } else { g.wrapper.removeClass("l-text-disabled"); p.disabled = false; } if (g.inputText.hasClass("l-text-field-null") && g.inputText.val() != p.nullText) { g.inputText.removeClass("l-text-field-null"); } g.checkValue(); } }); function currencyFormatter(num) { if (!num) return "0.00"; num = num.toString().replace(/\$|\,/g, ''); if (isNaN(num)) num = "0.00"; sign = (num == (num = Math.abs(num))); num = Math.floor(num * 100 + 0.50000000001); cents = num % 100; num = Math.floor(num / 100).toString(); if (cents < 10) cents = "0" + cents; for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3) ; i++) num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3)); return "" + (((sign) ? '' : '-') + '' + num + '.' + cents); } })(jQuery);