jQuery.event = { add :
function(elem, types, handler, data) {
if (elem.nodeType == 3 || elem.nodeType == 8)
return;
if (jQuery.browser.msie && elem.setInterval) elem = window;
if (!handler.guid) handler.guid =
this.guid++;
if (data != undefined) {
var fn = handler; handler =
this.proxy(fn,
function() {
return fn.apply(
this, arguments); }); handler.data = data; }
var events = jQuery.data(elem,
"events") || jQuery.data(elem,
"events", {}), handle = jQuery.data(elem,
"handle") || jQuery.data(elem,
"handle",
function() {
if (
typeof jQuery !=
"undefined" && !jQuery.event.triggered)
return jQuery.event.handle.apply( arguments.callee.elem, arguments); }); handle.elem = elem; jQuery.each(types.split(/\s+/),
function(index, type) {
var parts = type.split(
"."); type = parts[0]; handler.type = parts[1];
var handlers = events[type];
if (!handlers) { handlers = events[type] = {};
if (!jQuery.event.special[type] || jQuery.event.special[type].setup .call(elem, data) ===
false) {
if (elem.addEventListener) elem.addEventListener(type, handle,
false);
else if (elem.attachEvent) elem.attachEvent(
"on" + type, handle); } } handlers[handler.guid] = handler; jQuery.event.global[type] =
true; }); elem =
null; }, guid : 1, global : {}, remove :
function(elem, types, handler) {
if (elem.nodeType == 3 || elem.nodeType == 8)
return;
var events = jQuery.data(elem,
"events"), ret, index;
if (events) {
if (types == undefined || (
typeof types ==
"string" && types.charAt(0) ==
"."))
for (
var type
in events)
this.remove(elem, type + (types ||
""));
else {
if (types.type) { handler = types.handler; types = types.type; } jQuery .each(types.split(/\s+/),
function(index, type) {
var parts = type.split(
"."); type = parts[0];
if (events[type]) {
if (handler)
delete events[type][handler.guid];
else for (handler
in events[type])
if (!parts[1] || events[type][handler].type == parts[1])
delete events[type][handler];
for (ret
in events[type])
break;
if (!ret) {
if (!jQuery.event.special[type] || jQuery.event.special[type].teardown .call(elem) ===
false) {
if (elem.removeEventListener) elem.removeEventListener(type, jQuery.data(elem,
"handle"),
false);
else if (elem.detachEvent) elem.detachEvent(
"on" + type, jQuery.data(elem,
"handle")); } ret =
null;
delete events[type]; } } }); }
for (ret
in events)
break;
if (!ret) {
var handle = jQuery.data(elem,
"handle");
if (handle) handle.elem =
null; jQuery.removeData(elem,
"events"); jQuery.removeData(elem,
"handle"); } } }, trigger :
function(type, data, elem, donative, extra) { data = jQuery.makeArray(data);
if (type.indexOf(
"!") >= 0) { type = type.slice(0, -1);
var exclusive =
true; }
if (!elem) {
if (
this.global[type]) jQuery.each(jQuery.cache,
function() {
if (
this.events &&
this.events[type]) jQuery.event.trigger(type, data,
this.handle.elem); }); }
else {
if (elem.nodeType == 3 || elem.nodeType == 8)
return undefined;
var val, ret, fn = jQuery.isFunction(elem[type] ||
null), event = !data[0] || !data[0].preventDefault;
if (event) { data.unshift( { type : type, target : elem, preventDefault :
function() { }, stopPropagation :
function() { }, timeStamp : now() }); data[0][expando] =
true; } data[0].type = type;
if (exclusive) data[0].exclusive =
true;
var handle = jQuery.data(elem,
"handle");
if (handle) val = handle.apply(elem, data);
if ((!fn || (jQuery.nodeName(elem,
'a') && type ==
"click")) && elem[
"on" + type]&& elem[
"on" + type].apply(elem, data) ===
false) val =
false;
if (event) data.shift();
if (extra && jQuery.isFunction(extra)) { ret = extra.apply(elem, val ==
null ? data : data.concat(val));
if (ret !== undefined) val = ret; }
if (fn && donative !==
false && val !==
false && !(jQuery.nodeName(elem,
'a') && type ==
"click")) {
this.triggered =
true;
try { elem[type](); }
catch (e) { } }
this.triggered =
false; }
return val; }, handle :
function(event) {
var val, ret, namespace, all, handlers; event = arguments[0] = jQuery.event.fix(event || window.event); namespace = event.type.split(
"."); event.type = namespace[0]; namespace = namespace[1]; all = !namespace && !event.exclusive; handlers = (jQuery.data(
this,
"events") || {})[event.type];
for (
var j
in handlers) {
var handler = handlers[j];
if (all || handler.type == namespace) { event.handler = handler; event.data = handler.data; ret = handler.apply(
this, arguments);
if (val !==
false) val = ret;
if (ret ===
false) { event.preventDefault(); event.stopPropagation(); } } }
return val; }, props :
"altKey attrChange attrName bubbles button cancelable charCode clientX " +
"clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode " +
"metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX " +
"screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which" .split(
" "), fix :
function(event) {
if (event[expando] ==
true)
return event;
var originalEvent = event; event = { originalEvent : originalEvent };
for (
var i =
this.props.length, prop;i;) { prop =
this.props[--i]; event[prop] = originalEvent[prop]; } event[expando] =
true; event.preventDefault =
function() {
if (originalEvent.preventDefault) originalEvent.preventDefault(); originalEvent.returnValue =
false; }; event.stopPropagation =
function() {
if (originalEvent.stopPropagation) originalEvent.stopPropagation(); originalEvent.cancelBubble =
true; }; event.timeStamp = event.timeStamp || now();
if (!event.target) event.target = event.srcElement || document;
if (event.target.nodeType == 3) event.target = event.target.parentNode;
if (!event.relatedTarget && event.fromElement) event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
if (event.pageX ==
null && event.clientX !=
null) {
var doc = document.documentElement, body = document.body; event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0); event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0); }
if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode)) event.which = event.charCode || event.keyCode;
if (!event.metaKey && event.ctrlKey) event.metaKey = event.ctrlKe
相关资源:敏捷开发V1.0.pptx