📄 button-beta.js
字号:
* @description Adds event handlers to the button's form. * @protected */ _addListenersToForm: function () { var oForm = this.getForm(), oSrcElement, aListeners, nListeners, i, bHasKeyPressListener; if (oForm) { Event.on(oForm, "reset", this._onFormReset, null, this); Event.on(oForm, "submit", this.createHiddenFields, null, this); oSrcElement = this.get("srcelement"); if (this.get("type") == "submit" || (oSrcElement && oSrcElement.type == "submit")) { aListeners = Event.getListeners(oForm, "keypress"); bHasKeyPressListener = false; if (aListeners) { nListeners = aListeners.length; if (nListeners > 0) { i = nListeners - 1; do { if (aListeners[i].fn == YAHOO.widget.Button.onFormKeyPress) { bHasKeyPressListener = true; break; } } while (i--); } } if (!bHasKeyPressListener) { Event.on(oForm, "keypress", YAHOO.widget.Button.onFormKeyPress); } } } }, _originalMaxHeight: -1, /** * @method _showMenu * @description Shows the button's menu. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event) that triggered * the display of the menu. */ _showMenu: function (p_oEvent) { YAHOO.widget.MenuManager.hideVisible(); if (m_oOverlayManager) { m_oOverlayManager.hideAll(); } var oMenu = this._menu, nViewportHeight = Dom.getViewportHeight(), nMenuHeight, nScrollTop, nY; if (oMenu && (oMenu instanceof Menu)) { oMenu.cfg.applyConfig({ context: [this.get("id"), "tl", "bl"], constraintoviewport: false, clicktohide: false, visible: true }); oMenu.cfg.fireQueue(); oMenu.align("tl", "bl"); /* Stop the propagation of the event so that the MenuManager doesn't blur the menu after it gets focus. */ if (p_oEvent.type == "mousedown") { Event.stopPropagation(p_oEvent); } if (this.get("focusmenu")) { this._menu.focus(); } nMenuHeight = oMenu.element.offsetHeight; if ((oMenu.cfg.getProperty("y") + nMenuHeight) > nViewportHeight) { oMenu.align("bl", "tl"); nY = oMenu.cfg.getProperty("y"); nScrollTop = Dom.getDocumentScrollTop(); if (nScrollTop >= nY) { if (this._originalMaxHeight == -1) { this._originalMaxHeight = oMenu.cfg.getProperty("maxheight"); } oMenu.cfg.setProperty("maxheight", (nMenuHeight - ((nScrollTop - nY) + 20))); oMenu.align("bl", "tl"); } } } else if (oMenu && (oMenu instanceof Overlay)) { oMenu.show(); oMenu.align("tl", "bl"); nMenuHeight = oMenu.element.offsetHeight; if ((oMenu.cfg.getProperty("y") + nMenuHeight) > nViewportHeight) { oMenu.align("bl", "tl"); } } }, /** * @method _hideMenu * @description Hides the button's menu. * @protected */ _hideMenu: function () { var oMenu = this._menu; if (oMenu) { oMenu.hide(); } }, // Protected event handlers /** * @method _onMouseOver * @description "mouseover" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onMouseOver: function (p_oEvent) { if (!this._hasMouseEventHandlers) { this.on("mouseout", this._onMouseOut); this.on("mousedown", this._onMouseDown); this.on("mouseup", this._onMouseUp); this._hasMouseEventHandlers = true; } this.addStateCSSClasses("hover"); if (this._activationButtonPressed) { this.addStateCSSClasses("active"); } if (this._bOptionPressed) { this.addStateCSSClasses("activeoption"); } }, /** * @method _onMouseOut * @description "mouseout" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onMouseOut: function (p_oEvent) { this.removeStateCSSClasses("hover"); if (this.get("type") != "menu") { this.removeStateCSSClasses("active"); } if (this._activationButtonPressed || this._bOptionPressed) { Event.on(document, "mouseup", this._onDocumentMouseUp, null, this); } }, /** * @method _onDocumentMouseUp * @description "mouseup" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onDocumentMouseUp: function (p_oEvent) { this._activationButtonPressed = false; this._bOptionPressed = false; var sType = this.get("type"); if (sType == "menu" || sType == "split") { this.removeStateCSSClasses( (sType == "menu" ? "active" : "activeoption")); this._hideMenu(); } Event.removeListener(document, "mouseup", this._onDocumentMouseUp); }, /** * @method _onMouseDown * @description "mousedown" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onMouseDown: function (p_oEvent) { var sType, oElement, nX, me; function onMouseUp() { this._hideMenu(); this.removeListener("mouseup", onMouseUp); } if ((p_oEvent.which || p_oEvent.button) == 1) { if (!this.hasFocus()) { this.focus(); } sType = this.get("type"); if (sType == "split") { oElement = this.get("element"); nX = Event.getPageX(p_oEvent) - Dom.getX(oElement); if ((oElement.offsetWidth - this.OPTION_AREA_WIDTH) < nX) { this.fireEvent("option", p_oEvent); } else { this.addStateCSSClasses("active"); this._activationButtonPressed = true; } } else if (sType == "menu") { if (this.isActive()) { this._hideMenu(); this._activationButtonPressed = false; } else { this._showMenu(p_oEvent); this._activationButtonPressed = true; } } else { this.addStateCSSClasses("active"); this._activationButtonPressed = true; } if (sType == "split" || sType == "menu") { me = this; this._hideMenuTimerId = window.setTimeout(function () { me.on("mouseup", onMouseUp); }, 250); } } }, /** * @method _onMouseUp * @description "mouseup" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onMouseUp: function (p_oEvent) { var sType = this.get("type"); if (this._hideMenuTimerId) { window.clearTimeout(this._hideMenuTimerId); } if (sType == "checkbox" || sType == "radio") { this.set("checked", !(this.get("checked"))); } this._activationButtonPressed = false; if (this.get("type") != "menu") { this.removeStateCSSClasses("active"); } }, /** * @method _onFocus * @description "focus" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onFocus: function (p_oEvent) { var oElement; this.addStateCSSClasses("focus"); if (this._activationKeyPressed) { this.addStateCSSClasses("active"); } m_oFocusedButton = this; if (!this._hasKeyEventHandlers) { oElement = this._button;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -