⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 event.js

📁 SugarCRM5.1 开源PHP客户关系管理系统
💻 JS
📖 第 1 页 / 共 4 页
字号:
                    return false;                }                var cacheItem = null;                // The index is a hidden parameter; needed to remove it from                // the method signature because it was tempting users to                // try and take advantage of it, which is not possible.                var index = arguments[3];                  if ("undefined" == typeof index) {                    index = this._getCacheIndex(el, sType, fn);                }                if (index >= 0) {                    cacheItem = listeners[index];                }                if (!el || !cacheItem) {                    return false;                }                if (this.useLegacyEvent(el, sType)) {                    var legacyIndex = this.getLegacyIndex(el, sType);                    var llist = legacyHandlers[legacyIndex];                    if (llist) {                        for (i=0, len=llist.length; i<len; ++i) {                            li = llist[i];                            if (li &&                                 li[this.EL] == el &&                                 li[this.TYPE] == sType &&                                 li[this.FN] == fn) {                                    llist.splice(i, 1);                                    break;                            }                        }                    }                } else {                    try {                        this._simpleRemove(el, sType, cacheItem[this.WFN], false);                    } catch(e) {                        return false;                    }                }                // removed the wrapped handler                delete listeners[index][this.WFN];                delete listeners[index][this.FN];                listeners.splice(index, 1);                return true;            },            /**             * Returns the event's target element             * @method getTarget             * @param {Event} ev the event             * @param {boolean} resolveTextNode when set to true the target's             *                  parent will be returned if the target is a              *                  text node.  @deprecated, the text node is             *                  now resolved automatically             * @return {HTMLElement} the event's target             * @static             */            getTarget: function(ev, resolveTextNode) {                var t = ev.target || ev.srcElement;                return this.resolveTextNode(t);            },            /**             * In some cases, some browsers will return a text node inside             * the actual element that was targeted.  This normalizes the             * return value for getTarget and getRelatedTarget.             * @method resolveTextNode             * @param {HTMLElement} node node to resolve             * @return {HTMLElement} the normized node             * @static             */            resolveTextNode: function(node) {                // if (node && node.nodeName &&                         // "#TEXT" == node.nodeName.toUpperCase()) {                if (node && 3 == node.nodeType) {                    return node.parentNode;                } else {                    return node;                }            },            /**             * Returns the event's pageX             * @method getPageX             * @param {Event} ev the event             * @return {int} the event's pageX             * @static             */            getPageX: function(ev) {                var x = ev.pageX;                if (!x && 0 !== x) {                    x = ev.clientX || 0;                    if ( this.isIE ) {                        x += this._getScrollLeft();                    }                }                return x;            },            /**             * Returns the event's pageY             * @method getPageY             * @param {Event} ev the event             * @return {int} the event's pageY             * @static             */            getPageY: function(ev) {                var y = ev.pageY;                if (!y && 0 !== y) {                    y = ev.clientY || 0;                    if ( this.isIE ) {                        y += this._getScrollTop();                    }                }                return y;            },            /**             * Returns the pageX and pageY properties as an indexed array.             * @method getXY             * @param {Event} ev the event             * @return {[x, y]} the pageX and pageY properties of the event             * @static             */            getXY: function(ev) {                return [this.getPageX(ev), this.getPageY(ev)];            },            /**             * Returns the event's related target              * @method getRelatedTarget             * @param {Event} ev the event             * @return {HTMLElement} the event's relatedTarget             * @static             */            getRelatedTarget: function(ev) {                var t = ev.relatedTarget;                if (!t) {                    if (ev.type == "mouseout") {                        t = ev.toElement;                    } else if (ev.type == "mouseover") {                        t = ev.fromElement;                    }                }                return this.resolveTextNode(t);            },            /**             * Returns the time of the event.  If the time is not included, the             * event is modified using the current time.             * @method getTime             * @param {Event} ev the event             * @return {Date} the time of the event             * @static             */            getTime: function(ev) {                if (!ev.time) {                    var t = new Date().getTime();                    try {                        ev.time = t;                    } catch(e) {                         return t;                    }                }                return ev.time;            },            /**             * Convenience method for stopPropagation + preventDefault             * @method stopEvent             * @param {Event} ev the event             * @static             */            stopEvent: function(ev) {                this.stopPropagation(ev);                this.preventDefault(ev);            },            /**             * Stops event propagation             * @method stopPropagation             * @param {Event} ev the event             * @static             */            stopPropagation: function(ev) {                if (ev.stopPropagation) {                    ev.stopPropagation();                } else {                    ev.cancelBubble = true;                }            },            /**             * Prevents the default behavior of the event             * @method preventDefault             * @param {Event} ev the event             * @static             */            preventDefault: function(ev) {                if (ev.preventDefault) {                    ev.preventDefault();                } else {                    ev.returnValue = false;                }            },                         /**             * Finds the event in the window object, the caller's arguments, or             * in the arguments of another method in the callstack.  This is             * executed automatically for events registered through the event             * manager, so the implementer should not normally need to execute             * this function at all.             * @method getEvent             * @param {Event} e the event parameter from the handler             * @return {Event} the event              * @static             */            getEvent: function(e) {                var ev = e || window.event;                if (!ev) {                    var c = this.getEvent.caller;                    while (c) {                        ev = c.arguments[0];                        if (ev && Event == ev.constructor) {                            break;                        }                        c = c.caller;                    }                }                return ev;            },            /**             * Returns the charcode for an event             * @method getCharCode             * @param {Event} ev the event             * @return {int} the event's charCode             * @static             */            getCharCode: function(ev) {                return ev.charCode || ev.keyCode || 0;            },            /**             * Locating the saved event handler data by function ref             *             * @method _getCacheIndex             * @static             * @private             */            _getCacheIndex: function(el, sType, fn) {                for (var i=0,len=listeners.length; i<len; ++i) {                    var li = listeners[i];                    if ( li                 &&                          li[this.FN] == fn  &&                          li[this.EL] == el  &&                          li[this.TYPE] == sType ) {                        return i;                    }                }                return -1;            },            /**             * Generates an unique ID for the element if it does not already              * have one.             * @method generateId             * @param el the element to create the id for             * @return {string} the resulting id of the element             * @static             */            generateId: function(el) {                var id = el.id;                if (!id) {                    id = "yuievtautoid-" + counter;                    ++counter;                    el.id = id;                }                return id;            },            /**             * We want to be able to use getElementsByTagName as a collection             * to attach a group of events to.  Unfortunately, different              * browsers return different types of collections.  This function             * tests to determine if the object is array-like.  It will also              * fail if the object is an array, but is empty.             * @method _isValidCollection             * @param o the object to test             * @return {boolean} true if the object is array-like and populated             * @static             * @private             */            _isValidCollection: function(o) {                // this.logger.debug(o.constructor.toString())                // this.logger.debug(typeof o)                return ( o                    && // o is something                         o.length             && // o is indexed                         typeof o != "string" && // o is not a string                         !o.tagName           && // o is not an HTML element                         !o.alert             && // o is not a window                         typeof o[0] != "undefined" );            },            /**             * @private             * @property elCache             * DOM element cache             * @static             */            elCache: {},            /**             * We cache elements bound by id because when the unload event              * fires, we can no longer use document.getElementById             * @method getEl             * @static             * @private             */            getEl: function(id) {                return document.getElementById(id);            },            /**             * Clears the element cache             * @deprecated Elements are not cached any longer             * @method clearCache             * @static             * @private             */            clearCache: function() { },            /**             * hook up any deferred listeners             * @method _load             * @static             * @private             */            _load: function(e) {                loadComplete = true;                var EU = YAHOO.util.Event;                // Remove the listener to assist with the IE memory issue, but not                // for other browsers because FF 1.0x does not like it.                if (this.isIE) {                    EU._simpleRemove(window, "load", EU._load);                }            },            /**             * Polling function that runs before the onload event fires,              * attempting to attach to DOM Nodes as soon as they are              * available             * @method _tryPreloadAttach             * @static             * @private             */            _tryPreloadAttach: function() {                if (this.locked) {                    return false;                }                this.locked = true;                // keep trying until after the page is loaded.  We need to                 // check the page load state prior to trying to bind the                 // elements so that we can be certain all elements have been                 // tested appropriately                var tryAgain = !loadComplete;                if (!tryAgain) {                    tryAgain = (retryCount > 0);                }                // onAvailable                var notAvail = [];                for (var i=0,len=onAvailStack.length; i<len ; ++i) {                    var item = onAvailStack[i];                    if (item) {                        var el = this.getEl(item.id);                        if (el) {                            // The element is available, but not necessarily ready                            // @todo verify IE7 compatibility                            // @todo should we test parentNode.nextSibling?                            // @todo re-evaluate global content ready                            if ( !item.checkReady ||                                     loadComplete ||                                     el.nextSibling ||                                    (document && document.body) ) {                                var scope = el;                                if (item.override) {                                    if (item.override === true) {                                        scope = item.obj;                                    } else {                                        scope = item.override;                                    }                                }                                item.fn.call(scope, item.obj);                                //delete onAvailStack[i];                                // null out instead of delete for Opera                                onAvailStack[i] = null;                            }                        } else {                            notAvail.push(item);                        }                    }                }                retryCount = (notAvail.length === 0) ? 0 : retryCount - 1;                if (tryAgain) {                    // we may need to strip the nulled out items here                    this.startInterval();                } else {                    clearInterval(this._interval);                    this._interval = null;                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -