?? ajaxcallobject.js
字號:
__AJAXCboList = new Array();
__PageForm = null;
__bPageIsStored = false;
__bUnloadStoredPage = false;
__bTracing = false;
__doingSubmit = false;
__PreviousPostBack = null;
__TraceWindows = new Array();
__ClockID = 0;
__IsOpera = false;
__IsIE = false;
__ClkEvent = null;
// Excluding from post flags
// To be used with the "ExcludeFlags" attribute
excfViewState = 1;
excfFingerprints = 2;
excfUserHidden = 4;
excfAllHidden = excfViewState | excfFingerprints | excfUserHidden;
excfFormElements = 8;
excfAllElements = excfAllHidden | excfFormElements;
function AjaxCallObject()
{
this.Init();
}
AjaxCallObject.prototype.Init = function()
{
this.XmlHttp = this.GetHttpObject();
}
AjaxCallObject.prototype.GetHttpObject = function()
{
var xmlhttp;
/*@cc_on
@if (@_jscript_version >= 5)
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}
AjaxCallObject.prototype.GetAjaxCallType = function(element)
{
if (element == null)
return "none";
var attrib = element.getAttribute("AjaxCall");
if (attrib != null && attrib != '')
return attrib.toLowerCase();
if (element.parentNode == null || element.parentNode == document.body)
return "none";
else
return this.GetAjaxCallType(element.parentNode);
}
AjaxCallObject.prototype.GetAjaxScopeID = function(element)
{
if (element == null)
return null;
var attrib = element.getAttribute("AjaxLocalScope");
if ( attrib != null && attrib.toLowerCase() == "true" )
return element.getAttribute("id")
if (element.parentNode == null || element.parentNode == document.body)
return null;
else
return this.GetAjaxScopeID(element.parentNode);
}
AjaxCallObject.prototype.ExcludeFromPost = function(element, scopeID, flags)
{
var excludeAttr = element.getAttribute("ExcludeFromPost");
if (excludeAttr != null && excludeAttr.toLowerCase() == "true")
return true;
var name = element.name;
if (element.type == "hidden")
{
if ( name == "__MAGICAJAX_CONFIG" )
return false;
if ( excfAllHidden == (flags & excfAllHidden) )
return true;
if (name == "__VIEWSTATE")
{
return ( excfViewState == (flags & excfViewState) );
}
var fprintConst = "__CONTROL_FINGERPRINTS_";
if (name.indexOf(fprintConst) == 0)
{
if ( excfFingerprints == (flags & excfFingerprints) )
return true;
if (scopeID != null)
{
fprintElem = document.getElementById(name.substr(fprintConst.length));
if ( ! this.IsInAjaxScope(fprintElem, scopeID) )
return true;
}
}
else
{
return ( excfUserHidden == (flags & excfUserHidden) );
}
}
else
{
if ( excfFormElements == (flags & excfFormElements) )
return true;
return ( scopeID != null && !this.IsInAjaxScope(element, scopeID) )
}
return false;
}
AjaxCallObject.prototype.GetExcludeFlags = function(element)
{
if (element == null)
return 0;
var flags = 0;
var flagsAttr = element.getAttribute("ExcludeFlags");
if (flagsAttr != null)
flags = eval(flagsAttr);
if (element.parentNode == null || element.parentNode == document.body)
return flags;
else
return ( flags | this.GetExcludeFlags(element.parentNode) );
}
AjaxCallObject.prototype.IsInAjaxScope = function(element, scopeID)
{
var attrib = element.getAttribute("AjaxLocalScope");
if ( attrib != null && attrib.toLowerCase() == "true" && element.getAttribute("id") == scopeID )
return true;
if (element.parentNode == null || element.parentNode == document.body)
return false;
else
return this.IsInAjaxScope(element.parentNode, scopeID);
}
AjaxCallObject.prototype.GetTargetElement = function(eventTarget)
{
var target = document.getElementById(eventTarget);
if (target != null)
return target;
var elemUniqueID = eventTarget.split("$").join(":");
var ids = elemUniqueID.split(":");
// Checks the unique id and its parents until it finds a target element
// i.e. for ajaxPanel_grid:row:field it checks
// ajaxPanel_grid_row_field
// ajaxPanel_grid_row
// ajaxPanel_grid
for (var num=ids.length; num > 0; num--)
{
var elemID = "";
for (var i=0; i < num; i++)
elemID += (i==0 ? "" : "_") + ids[i];
target = document.getElementById(elemID);
if (target != null)
break;
}
// If no element found, try last id (fixes .NET 1.1 calendar control bug)
if (target == null && ids.length > 1)
target = document.getElementById(ids[ids.length-1]);
return target;
}
AjaxCallObject.prototype.AddEventListener = function(obj, eventName, fn, capture)
{
if (typeof(capture)=="undefined") capture=false;
if (obj.addEventListener)
obj.addEventListener(eventName, fn, capture);
else
obj.attachEvent("on"+eventName, fn);
}
AjaxCallObject.prototype.DispatchEvent = function(obj, eventName)
{
if (obj.fireEvent)
obj.fireEvent("on"+eventName);
else
{
var evt = document.createEvent("Events")
evt.initEvent(eventName, true, true);
obj.dispatchEvent(evt);
}
}
AjaxCallObject.prototype.HookAjaxCall = function(bPageIsStored, bUnloadStoredPage, bTracing, pageFormID)
{
__IsIE = navigator.appName.indexOf("Internet Explorer") != -1;
__IsOpera = window.opera ? true : false;
__PageForm = document.getElementById(pageFormID);
if (__PageForm == null) return;
this.AddEventListener(__PageForm, "submit", this.OnFormSubmit);
this.AddEventListener(__PageForm, "click", this.OnFormClick, true);
if (typeof __doPostBack != 'undefined')
{
__PreviousPostBack = __doPostBack;
__doPostBack = this.DoPostBack;
}
__bPageIsStored = bPageIsStored;
__bUnloadStoredPage = bUnloadStoredPage;
__bTracing = bTracing;
if (typeof(RBS_Controls) != "undefined")
{
for (var i=0; i < RBS_Controls.length; i++)
RBS_Controls_Store[i].setAttribute("ExcludeFromPost", "true");
}
if ( !bPageIsStored || !bUnloadStoredPage )
{
this.AddEventListener(window, "load", this.OnPageLoad);
this.AddEventListener(window, "beforeunload", this.OnPageBeforeUnload);
}
this.AddEventListener(window, "unload", this.OnPageUnload);
}
AjaxCallObject.prototype.OnFormClick = function(e)
{
__ClkEvent = e;
}
AjaxCallObject.prototype.OnFormSubmit = function(e)
{
if (__doingSubmit)
{
__doingSubmit = false;
if (e.preventDefault)
e.preventDefault();
e.returnValue=false;
return false;
}
if (typeof(Page_ClientValidate)=="function")
{
if (window.event && !__IsOpera)
{
if (window.event.returnValue == false)
return;
}
else if (e.getPreventDefault && e.getPreventDefault() == true)
return;
}
// Empty the cached html of RenderedByScript controls
if (typeof(RBS_Controls) != "undefined")
{
for (var i=0; i < RBS_Controls.length; i++)
RBS_Controls_Store[i].value = "";
}
var target;
if ("activeElement" in document)
{
// Internet Explorer and Opera
target = document.activeElement;
}
else
{
// Firefox
target = e ? e.explicitOriginalTarget : null;
}
if (target == null || target.name == null || target.name == "")
return true;
var cbType = AJAXCbo.GetAjaxCallType(target);
if (cbType != "none")
{
__doingSubmit = true;
AJAXCbo.DispatchEvent(__PageForm, "submit");
__doingSubmit = false;
var theData = "";
//check if target is an input element of type 'image'
if (target != null && target.type == "image")
{
if (e.offsetX)
{
// IE
theData = target.name + ".x=" + (e.offsetX - target.offsetLeft) + "&" + target.name + ".y=" + (e.offsetY - target.offsetTop);
}
else
{
// Firefox
theData = target.name + ".x=" + (__ClkEvent.pageX - target.offsetLeft) + "&" + target.name + ".y=" + (__ClkEvent.pageY - target.offsetTop);
}
}
if (AJAXCbo.DoAjaxCall(target.name, "", cbType, AJAXCbo.GetAjaxScopeID(target), theData))
{
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
return false;
}
else
return true;
}
else
{
AJAXCbo.ClearTracingWindows();
return true;
}
}
// Replaces normal __doPostBack
AjaxCallObject.prototype.DoPostBack = function(eventTarget, eventArgument)
{
if (typeof(WebForm_OnSubmit)=="function")
{
if (__PageForm.onsubmit && (__PageForm.onsubmit() == false))
return;
}
// Empty the cached html of RenderedByScript controls
if (typeof(RBS_Controls) != "undefined")
{
for (var i=0; i < RBS_Controls.length; i++)
RBS_Controls_Store[i].value = "";
}
var target = AJAXCbo.GetTargetElement(eventTarget);
var cbType = AJAXCbo.GetAjaxCallType(target);
if (cbType != "none")
{
AJAXCbo.DoAjaxCall(eventTarget, eventArgument, cbType, AJAXCbo.GetAjaxScopeID(target));
if (target.tagName == "INPUT" && (target.type == "submit" || target.type == "image"))
{
if (window.event)
{
window.event.returnValue = false;
}
else if (__ClkEvent)
{
if (__ClkEvent.preventDefault)
__ClkEvent.preventDefault();
}
}
}
else
{
if (__PreviousPostBack != null)
{
__PreviousPostBack(eventTarget, eventArgument);
}
}
}
AjaxCallObject.prototype.OnPageLoad = function()
{
// Restore the html of RenderedByScript controls
if (typeof(RBS_Controls) != "undefined")
{
for (var i=0; i < RBS_Controls.length; i++)
{
var html = RBS_Controls_Store[i].value;
if (html != "")
{
RBS_Controls[i].innerHTML = html.substring(5, html.length);
RBS_Controls_Store[i].value = "";
}
}
}
}
AjaxCallObject.prototype.OnPageBeforeUnload = function()
{
// Save the html of RenderedByScript controls, so that it can be restored for the
// browser's "Back Button"
if (typeof(RBS_Controls) != "undefined")
{
for (var i=0; i < RBS_Controls.length; i++)
RBS_Controls_Store[i].value = "HTML:" + RBS_Controls[i].innerHTML;
}
}
AjaxCallObject.prototype.OnPageUnload = function()
{
AJAXCbo.ClearTracingWindows();
if ( !__bPageIsStored || !__bUnloadStoredPage )
return;
if (__PageForm["__AJAX_PAGEKEY"] == null)
return;
var thePage = __PageForm.action;
var index = thePage.indexOf("?");
if (index != -1)
thePage = thePage.substring(0, index);
thePage = thePage + "?__AJAX_PAGEUNLOAD=" + encodeURIComponent(__PageForm["__AJAX_PAGEKEY"].value);
var oThis = AJAXCbo;
__AJAXCboList.push(oThis);
AJAXCbo = new AjaxCallObject();
if( oThis.XmlHttp )
{
oThis.XmlHttp.open('GET', thePage, true);
oThis.XmlHttp.onreadystatechange = function(){ };
oThis.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
oThis.XmlHttp.send(null);
}
}
AjaxCallObject.prototype.DoAjaxCall = function(eventTarget, eventArgument, ajaxCallType, ajaxScopeID, additionalData)
{
var target = this.GetTargetElement(eventTarget);
//defaults
if (!ajaxCallType) ajaxCallType = "async";
if (typeof(ajaxScopeID) == "undefined")
ajaxScopeID = this.GetAjaxScopeID( target );
var theData = '';
var theform = __PageForm;
var thePage = theform.action;
var eName = '';
theData = '__EVENTTARGET=' + this.EncodePostData(eventTarget.split("$").join(":")) + '&';
theData += '__EVENTARGUMENT=' + this.EncodePostData(eventArgument) + '&';
theData += '__AJAXCALL=true&';
if (ajaxScopeID != null)
theData += '__AJAXSCOPE=' + ajaxScopeID + '&';
if (typeof(additionalData) != "undefined" && additionalData != "")
theData += additionalData + "&";
var excludeFlags = this.GetExcludeFlags( target );
var elemCount = theform.elements.length;
for( var i=0; i<elemCount; i++ )
{
curElem = theform.elements[i];
eName = curElem.name;
if( eName && eName != '' && curElem.tagName != "EMBED")
{
if( eName == '__EVENTTARGET' || eName == '__EVENTARGUMENT' )
{
// Do Nothing
}
else if ( ! this.ExcludeFromPost(curElem, ajaxScopeID, excludeFlags) )
{
if ( __bPageIsStored && eName == '__VIEWSTATE' )
continue;
var type = curElem.type;
var val = curElem.value;
if ( type == "submit" || type == "button" )
continue;
val = this.EncodePostData(val);
if ( type == "select-multiple" || type == "select-one" )
{
var selectLength = curElem.options.length;
var optNameStr = this.EncodePostData(eName);
for (var j=0; j < selectLength; j++)
if (curElem.options[j].selected)
theData = theData + optNameStr + '=' + this.EncodePostData(curElem.options[j].value) + '&';
}
else if ( (type != "checkbox" && type != "radio") || curElem.checked )
{
theData = theData + this.EncodePostData(eName) + '=' + val + '&';
}
}
}
}
if (theData.substr(theData.length-1) == "&")
theData = theData.substr(0, theData.length-1);
if( this.XmlHttp )
{
if (waitElement)
{
waitElement.style.visibility = 'visible';
MoveWaitElement();
}
var oThis = this;
__AJAXCboList.push(oThis);
AJAXCbo = new AjaxCallObject();
if (__bTracing)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -