(function ($) { /** * 文本控件 * * @example * var editor = new FR.TextEditor({ * renderEl : 'body', * value : 'Hello' * }); * * @class FR.TextEditor * @extends FR.EditComp * * @cfg {JSON} options 属性配置 * @cfg {Boolean} [options.autoVerify=true] 自动校验规则 */ FR.TextEditor = FR.extend(FR.EditComp, { _defaultConfig: function () { return $.extend(FR.TextEditor.superclass._defaultConfig.apply(), { autoVerify: true }); }, /** * 判断是否是不符合规则的输入 * @param e Event * @returns {boolean|*} 返回输入是否符合规则 */ isValidateInput: function (e) { return !FR.isSpecialKey(e); }, _dealValueWithEvents: function (value) { var oldValue = this.getValue(); this.editComp.val(value); if (arguments[1] !== false) { this.fireEvent(FR.Events.CHANGE, value, oldValue); // fire value // change event, // newValue & // oldValue this.fireEvent(FR.Events.AFTEREDIT); } }, recoveryValue: function () { this.editComp.val(this.options.oldValue); }, select: function () { if (this.editComp.select) { this.editComp.select(); } }, getValue: function () { return this.editComp.val(); }, doResize: function(give){ FR.TextEditor.superclass.doResize.call(this, give); } }); $.shortcut("text", FR.TextEditor); /** * 密码控件 * @class FR.Password * @extends FR.TextEditor * @cfg {Boolean} [passwordText=false] 是否是密码文本 */ FR.Password = FR.extend(FR.TextEditor, /**@class FR.Password*/{ _defaultConfig: function () { return $.extend(FR.TextEditor.superclass._defaultConfig.apply(), { passwordText: true //属性保留,主要用于填报,识别密码控件 }); }, getValue: function () { var value = FR.Password.superclass.getValue.apply(this, arguments); // denny: 如果是密码控件,且需要客户端加密,加密之 value.encryption = true; return value; }, _createEditComp: function () { return $("<input type=\"password\"/>"); } }); $.shortcut("password", FR.Password); /** * 文本域控件 * @class FR.TextArea * @extends FR.TextEditor * @cfg {Boolean} [multiline=false] 是否支持多行显示 */ FR.TextArea = FR.extend(FR.TextEditor, /**@class FR.TextArea*/{ _defaultConfig: function () { return $.extend(FR.TextEditor.superclass._defaultConfig.apply(), { multiline: true }); }, _init: function () { FR.TextArea.superclass._init.apply(this, arguments); var o = this.options, self = this; if (o.multiline === true) { this.editComp.keydown(function (e) { if (self.options.write && FR.keyCode.UP == e.keyCode || FR.keyCode.DOWN == e.keyCode) { // 填报正在编辑时,上下键会moveTDCell,与文本域冲突,这里屏蔽了。 e.stopPropagation(); return; } // b:影响填报,为什么阻止冒泡 // wei:回车会触发参数界面的查询按钮,因此阻止冒泡为了不触发查询按钮。填报时不阻止,因为回车时 // 希望格子往下切换。 if (e.keyCode === 13) { if (self.options.form) { self.fireEvent(FR.Events.AFTEREDIT); e.stopPropagation(); } } var eel = this; if (e.ctrlKey && e.keyCode === 13) { e.ctrlKey = false; // 改成从光标所在位置换行 var val = eel.value; var inputEl = $('.'+ o.cls, self.element).eq(0)[0]; if (typeof inputEl.selectionStart == "number" && typeof inputEl.selectionEnd == "number") { var start = inputEl.selectionStart; eel.value = val.slice(0, start) + "\n" + val.slice(inputEl.selectionEnd); inputEl.selectionStart = inputEl.selectionEnd = start + 1; } else if (document.selection && document.selection.createRange) { this.focus(); var range = document.selection.createRange(); range.text = "\r\n"; range.collapse(false); range.select(); } self.fireEvent(FR.Events.AFTEREDIT); } }); // shoc:杂项模式修改white-space解决换行问题,客户bug28462 //火狐下自动换行也有问题 if (!jQuery.support.boxModel || FR.Browser.r.gecko) { this.editComp.css({'white-space': 'normal'}); } } }, _createEditComp: function () { return $("<textarea style='overflow-y:auto;resize:none'></textarea>"); }, /** * 判断是否是不符合规则的输入 * @param e Event * @returns {boolean|*} 返回输入是否符合规则 */ isValidateInput: function (e) { // wei: 如果是可多行输入的文本框,那么输入回车也应该触发编辑后事件。 return FR.TextArea.superclass.isValidateInput.call(this, e) || (e.keyCode === 13 && this.options.form); }, doResize: function (give) { FR.TextEditor.superclass.doResize.call(this, give); } }); $.shortcut("textarea", FR.TextArea); })(jQuery);