📄 maskededitbehavior.js
字号:
// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Permissive License.
// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
// All other rights reserved.
/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Common/Common.js" />
// Product : MaskedEdit Extend Control
// Version : 1.0.0.0
// Date : 10/23/2006
// Development : Fernando Cerqueira
// Version : 1.0.0.1
// Development : 02/22/2007 Fernando Cerqueira
//
Type.registerNamespace('AjaxControlToolkit');
AjaxControlToolkit.MaskedEditBehavior = function(element)
{
AjaxControlToolkit.MaskedEditBehavior.initializeBase(this, [element]);
// **************************************************
// Properties
// **************************************************
// mask
this._Mask = "";
this._MaskType = AjaxControlToolkit.MaskedEditType.None;
this._Filtered = "";
this._PromptChar = "_";
this._InputDirection = AjaxControlToolkit.MaskedEditInputDirections.LeftToRight;
// Message
this._MessageValidatorTip = true;
this._ShowMessageErrorFloat = false;
this._CssMessageErrorFloat = "";
// AutoComplete
this._AutoComplete = true;
this._AutoCompleteValue = "";
// behavior
this._ClearTextOnInvalid = false;
this._ClearMaskOnLostfocus = true;
this._AcceptAmPm = AjaxControlToolkit.MaskedEditShowSymbol.None;
this._AcceptNegative = AjaxControlToolkit.MaskedEditShowSymbol.None;
this._DisplayMoney = AjaxControlToolkit.MaskedEditShowSymbol.None;
// CSS
this._OnFocusCssClass = "MaskedEditFocus";
this._OnInvalidCssClass = "MaskedEditError";
this._OnFocusCssNegative = "MaskedEditFocusNegative";
this._OnBlurCssNegative = "MaskedEditBlurNegative";
// globalization
this._CultureName = "";
this._UserDateFormat = AjaxControlToolkit.MaskedEditUserDateFormat.None;
this._UserTimeFormat = AjaxControlToolkit.MaskedEditUserTimeFormat.None;
// globalization Hidden
this._CultureDatePlaceholder = "";
this._CultureTimePlaceholder = "";
this._CultureDecimalPlaceholder = "";
this._CultureThousandsPlaceholder = "";
this._CultureDateFormat = "";
this._CultureCurrencySymbolPlaceholder = "";
this._CultureAMPMPlaceholder = "";
this._AMPMPlaceholderSeparator = ";";
this._Century = 1900;
// clipboard
this._AllowCopyPaste = true;
this._ClipboardText = AjaxControlToolkit.Resources.Shared_BrowserSecurityPreventsPaste;
// **************************************************
// local var mask valid
// **************************************************
// 9 = only numeric
// L = only letter
// $ = only letter and spaces
// C = only custom - read from this._Filtered
// A = only letter and custom
// N = only numeric and custom
// ? = any digit
this._CharsEditMask = "9L$CAN?";
// **************************************************
// local var special mask
// **************************************************
// at runtime replace with culture property
// / = Date placeholder
// : = Time placeholder
// . = Decimal placeholder
// , = Thousands placeholder
this._CharsSpecialMask = "/:.,";
// **************************************************
// local converted mask
// **************************************************
// i.e.: 9{2} => 99 , 9{2}/9{2}/9{2} = 99/99/99
this._MaskConv = "";
// **************************************************
// Others local Var
// **************************************************
this._EmptyMask = ""; // save Empty Mask
this._maskvalid = "" // save valid Mask
this._DirectSelText = ""; // save the Direction selected Text (only for ie)
this._initialvalue = ""; // save the initial value for verify changed
this._LogicSymbol = ""; // save the symbol - or AM/PM
this._LogicTextMask = ""; // save logic mask with text input
this._LogicMask = ""; // save logic mask without text
this._LogicMaskConv = ""; // save logic mask without text and without escape
this._LogicPrompt = String.fromCharCode(1); // logic prompt char
this._LogicEscape = String.fromCharCode(2); // logic escape char
this._LogicFirstPos = -1; // first valid position
this._LogicLastPos = -1; // Last valid position
this._LogicLastInt = -1; // Last valid position RTL Integer with decimal
this._QtdValidInput = 0; // Qtd Valid input Position
this._InLostfocus = false; // Flag to validate in lost focus not duplicate clearMask execute
this._ExternalMessageError = ""; // Save local MessageError from Controls Validator
this._CurrentMessageError = ""; // Save local Current MessageError
this._FiringOnChange = false; // true when OnChange is being fired
this._ErroOnEnter = false; // Flag Erro validate with Enter
// **************************************************
// local chars ANSI
// **************************************************
this._charLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
this._charNumbers = "0123456789";
this._charEscape = "\\";
// **************************************************
// local placeholder delimit for info repeat mask
// **************************************************
this._DelimitStartDup = "{";
this._DelimitEndDup = "}";
// **************************************************
// Handler
// **************************************************
this._focusHandler = null;
this._keypressdown = null;
this._keypressHandler = null;
this._blurHandler = null;
this._mouseOutHandler = null;
this._mouseOutHandler = null;
this._mouseMoveHandler = null;
this._mouseEnterHandler = null;
this._changeHandler = null;
// **************************************************
// Only for Opera
// **************************************************
this._timer = null; //Timer
this._timerHandler = null; //Timer Handler
this._SaveSymb = ""; // Symb Saved immediate perform Action
this._SaveText = ""; // Text Saved immediate perform Action
this._SavePosi = -1; // Cursor pos Saved immediate perform Action
this._SaveMask = ""; // Mask with text Saved
this._SaveKeyDown = 0; // save scancode at keydown
}
AjaxControlToolkit.MaskedEditBehavior.prototype = {
initialize : function()
{
var e = this.get_element();
this._InLostfocus = true;
AjaxControlToolkit.MaskedEditBehavior.callBaseMethod(this, 'initialize');
this._createMask();
// if this textbox is focused initially
var hasInitialFocus = false;
var clientState = this.get_ClientState();
if (clientState != null && clientState != "")
{
hasInitialFocus = (clientState == "Focused");
this.set_ClientState(null);
}
//only for ie , for firefox see keydown
if (document.activeElement)
{
if (e.id == document.activeElement.id)
{
hasInitialFocus = true;
}
}
// Create delegates Attach events
if (this._ShowMessageErrorFloat)
{
this._mouseOutHandler = Function.createDelegate(this, this._onMouseOut);
$addHandler(e, "mouseout", this._mouseOutHandler);
this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove);
$addHandler(e, "mousemove", this._mouseMoveHandler);
this._mouseEnterHandler = Function.createDelegate(this, this._onMouseover);
$addHandler(e, "mouseover", this._mouseEnterHandler);
}
if (!e.readOnly)
{
this._keypressdown = Function.createDelegate(this, this._onKeyPressdown);
$addHandler(e, "keydown", this._keypressdown);
this._keypressHandler = Function.createDelegate(this, this._onKeyPress);
$addHandler(e, "keypress", this._keypressHandler);
}
this._focusHandler = Function.createDelegate(this, this._onFocus);
$addHandler(e, "focus", this._focusHandler);
this._blurHandler = Function.createDelegate(this, this._onBlur);
$addHandler(e, "blur", this._blurHandler);
this._changeHandler = Function.createDelegate(this, this._onChange);
$addHandler(e, "change", this._changeHandler);
if (Sys.Browser.agent == Sys.Browser.Opera)
{
// Create timer
this._timerHandler = Function.createDelegate(this, this._OnTimerTicket);
this._timer = new Sys.Timer();
this._timer.set_enabled(false);
this._timer.set_interval(100);
this._timer.add_tick(this._timerHandler);
this._SaveText = "";
this._SavePosi = -1;
this._timer.set_enabled(true);
}
var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(e);
if (this._ClearMaskOnLostfocus)
{
this._InitValue(wrapper.get_Value(),true);
}
else
{
this._InitValue(wrapper.get_Value().substring(this._LogicFirstPos,this._LogicLastPos+1),true);
}
if (hasInitialFocus)
{
this._onFocus();
}
else
{
if (this._ClearMaskOnLostfocus)
{
wrapper.set_Value(this._getClearMask(wrapper.get_Value()));
}
var IsValid = this._CaptureServerValidators();
if (!IsValid)
{
if (this._OnInvalidCssClass != "")
{
this.AddCssClassMaskedEdit(this._OnInvalidCssClass);
}
}
}
}
//
// Detach events this.dispose
//
, dispose : function()
{
var e = this.get_element();
if (this._mouseOutHandler)
{
$removeHandler(e, "mouseout", this._mouseOutHandler);
this._mouseOutHandler = null;
}
if (this._mouseMoveHandler)
{
$removeHandler(e, "mousemove", this._mouseMoveHandler);
this._mouseMoveHandler = null;
}
if (this._mouseEnterHandler)
{
$removeHandler(e, "mouseover", this._mouseEnterHandler);
this._mouseEnterHandler = null;
}
if (this._focusHandler)
{
$removeHandler(e, "focus", this._focusHandler);
this._focusHandler = null;
}
if (this._focusHandler)
{
$removeHandler(e, "focus", this._focusHandler);
this._focusHandler = null;
}
if (this._blurHandler)
{
$removeHandler(e, "blur", this._blurHandler);
this._blurHandler = null;
}
if (this._changeHandler)
{
$removeHandler(e, "change", this._changeHandler);
this._changeHandler = null;
}
if (this._keypressdown)
{
$removeHandler(e, "keydown", this._keypressdown);
this._keypressdown = null;
}
if (this._keypressHandler)
{
$removeHandler(e, "keypress", this._keypressHandler);
this._keypressHandler = null;
}
if (this._timerHandler) {
this._timer.set_enabled(false);
this._timerHandler = null;
this._timer.dispose();
this._timer = null;
}
AjaxControlToolkit.MaskedEditBehavior.callBaseMethod(this, 'dispose');
}
//
// EVENT TARGET
//
, _OnTimerTicket : function()
{
this._SaveSymb = "";
if (this._InLostfocus)
{
return;
}
this._timer.set_enabled(false);
var wrapper = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element());
if (this._SaveText != "")
{
wrapper.set_Value(this._SaveText);
this.setSelectionRange(this._SavePosi,this._SavePosi);
this._SaveText = "";
this._SavePosi = -1;
this._SaveMask = wrapper.get_Value();
}
else
{
if (wrapper.get_Value().length != this._EmptyMask.length)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -