📄 autocomplete.js
字号:
}
if(this.useIFrame && !this._oContainer._oIFrame) {
var oIFrame = document.createElement("iframe");
oIFrame.src = this.iFrameSrc;
oIFrame.frameBorder = 0;
oIFrame.scrolling = "no";
oIFrame.style.position = "absolute";
oIFrame.style.width = "100%";
oIFrame.style.height = "100%";
this._oContainer._oIFrame = this._oContainer.appendChild(oIFrame);
}
};
/**
* Initializes the auto complete container once at object creation
*
* @private
*/
YAHOO.widget.AutoComplete.prototype._initContainer = function() {
if(!this._oContainer._oContent) {
// The oContent div helps size the iframe and shadow properly
var oContent = document.createElement("div");
oContent.className = "yui-ac-content";
oContent.style.display = "none";
this._oContainer._oContent = this._oContainer.appendChild(oContent);
var oHeader = document.createElement("div");
oHeader.className = "yui-ac-hd";
oHeader.style.display = "none";
this._oContainer._oContent._oHeader = this._oContainer._oContent.appendChild(oHeader);
var oBody = document.createElement("div");
oBody.className = "yui-ac-bd";
this._oContainer._oContent._oBody = this._oContainer._oContent.appendChild(oBody);
var oFooter = document.createElement("div");
oFooter.className = "yui-ac-ft";
oFooter.style.display = "none";
this._oContainer._oContent._oFooter = this._oContainer._oContent.appendChild(oFooter);
}
else {
}
};
/**
* Clears out contents of container body and creates up to
* YAHOO.widget.AutoComplete#maxResultsDisplayed <li> elements in an
* <ul> element.
*
* @private
*/
YAHOO.widget.AutoComplete.prototype._initList = function() {
this._aListItems = [];
while(this._oContainer._oContent._oBody.hasChildNodes()) {
var oldListItems = this.getListItems();
if(oldListItems) {
for(var oldi = oldListItems.length-1; oldi >= 0; i--) {
oldListItems[oldi] = null;
}
}
this._oContainer._oContent._oBody.innerHTML = "";
}
var oList = document.createElement("ul");
oList = this._oContainer._oContent._oBody.appendChild(oList);
for(var i=0; i<this.maxResultsDisplayed; i++) {
var oItem = document.createElement("li");
oItem = oList.appendChild(oItem);
this._aListItems[i] = oItem;
this._initListItem(oItem, i);
}
this._maxResultsDisplayed = this.maxResultsDisplayed;
};
/**
* Initializes each <li> element in the container list.
*
* @param {object} oItem The <li> DOM element
* @param {number} nItemIndex The index of the element
* @private
*/
YAHOO.widget.AutoComplete.prototype._initListItem = function(oItem, nItemIndex) {
var oSelf = this;
oItem.style.display = "none";
oItem._nItemIndex = nItemIndex;
oItem.mouseover = oItem.mouseout = oItem.onclick = null;
YAHOO.util.Event.addListener(oItem,"mouseover",oSelf._onItemMouseover,oSelf);
YAHOO.util.Event.addListener(oItem,"mouseout",oSelf._onItemMouseout,oSelf);
YAHOO.util.Event.addListener(oItem,"click",oSelf._onItemMouseclick,oSelf);
};
/**
* Handles <li> element mouseover events in the container.
*
* @param {event} v The mouseover event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onItemMouseover = function(v,oSelf) {
if(oSelf.prehighlightClassName) {
oSelf._togglePrehighlight(this,"mouseover");
}
else {
oSelf._toggleHighlight(this,"to");
}
oSelf.itemMouseOverEvent.fire(oSelf, this);
};
/**
* Handles <li> element mouseout events in the container.
*
* @param {event} v The mouseout event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onItemMouseout = function(v,oSelf) {
if(oSelf.prehighlightClassName) {
oSelf._togglePrehighlight(this,"mouseout");
}
else {
oSelf._toggleHighlight(this,"from");
}
oSelf.itemMouseOutEvent.fire(oSelf, this);
};
/**
* Handles <li> element click events in the container.
*
* @param {event} v The click event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onItemMouseclick = function(v,oSelf) {
// In case item has not been moused over
oSelf._toggleHighlight(this,"to");
oSelf._selectItem(this);
};
/**
* Handles container mouseover events.
*
* @param {event} v The mouseover event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onContainerMouseover = function(v,oSelf) {
oSelf._bOverContainer = true;
};
/**
* Handles container mouseout events.
*
* @param {event} v The mouseout event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onContainerMouseout = function(v,oSelf) {
oSelf._bOverContainer = false;
// If container is still active
if(oSelf._oCurItem) {
oSelf._toggleHighlight(oSelf._oCurItem,"to");
}
};
/**
* Handles container scroll events.
*
* @param {event} v The scroll event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onContainerScroll = function(v,oSelf) {
oSelf._oTextbox.focus();
};
/**
* Handles container resize events.
*
* @param {event} v The resize event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onContainerResize = function(v,oSelf) {
oSelf._toggleContainerHelpers(oSelf._bContainerOpen);
};
/**
* Handles textbox keydown events of functional keys, mainly for UI behavior.
*
* @param {event} v The keydown event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown = function(v,oSelf) {
var nKeyCode = v.keyCode;
switch (nKeyCode) {
case 9: // tab
if(oSelf.delimChar && (oSelf._nKeyCode != nKeyCode)) {
if(oSelf._bContainerOpen) {
YAHOO.util.Event.stopEvent(v);
}
}
// select an item or clear out
if(oSelf._oCurItem) {
oSelf._selectItem(oSelf._oCurItem);
}
else {
oSelf._clearList();
}
break;
case 13: // enter
if(oSelf._nKeyCode != nKeyCode) {
if(oSelf._bContainerOpen) {
YAHOO.util.Event.stopEvent(v);
}
}
if(oSelf._oCurItem) {
oSelf._selectItem(oSelf._oCurItem);
}
else {
oSelf._clearList();
}
break;
case 27: // esc
oSelf._clearList();
return;
case 39: // right
oSelf._jumpSelection();
break;
case 38: // up
YAHOO.util.Event.stopEvent(v);
oSelf._moveSelection(nKeyCode);
break;
case 40: // down
YAHOO.util.Event.stopEvent(v);
oSelf._moveSelection(nKeyCode);
break;
default:
break;
}
};
/**
* Handles textbox keypress events, mainly for stopEvent in Safari.
*
* @param {event} v The keyup event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress = function(v,oSelf) {
var nKeyCode = v.keyCode;
switch (nKeyCode) {
case 9: // tab
case 13: // enter
if((oSelf._nKeyCode != nKeyCode)) {
YAHOO.util.Event.stopEvent(v);
}
break;
case 38: // up
case 40: // down
YAHOO.util.Event.stopEvent(v);
break;
default:
break;
}
};
/**
* Handles textbox keyup events that trigger queries.
*
* @param {event} v The keyup event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp = function(v,oSelf) {
// Check to see if any of the public properties have been updated
oSelf._initProps();
var nKeyCode = v.keyCode;
oSelf._nKeyCode = nKeyCode;
var sChar = String.fromCharCode(nKeyCode);
var sText = this.value; //string in textbox
// Filter out chars that don't trigger queries
if (oSelf._isIgnoreKey(nKeyCode) || (sText.toLowerCase() == oSelf._sCurQuery)) {
return;
}
else {
oSelf.textboxKeyEvent.fire(oSelf, nKeyCode);
}
// Set timeout on the request
if (oSelf.queryDelay > 0) {
var nDelayID =
setTimeout(function(){oSelf._sendQuery(sText);},(oSelf.queryDelay * 1000));
if (oSelf._nDelayID != -1) {
clearTimeout(oSelf._nDelayID);
}
oSelf._nDelayID = nDelayID;
}
else {
// No delay so send request immediately
oSelf._sendQuery(sText);
}
};
/**
* Whether or not key is functional or should be ignored. Note that the right
* arrow key is NOT an ignored key since it triggers queries for certain intl
* charsets.
*
* @param {number} nKeycode Code of key pressed
* @return {boolean} Whether or not to be ignore key
* @private
*/
YAHOO.widget.AutoComplete.prototype._isIgnoreKey = function(nKeyCode) {
if ((nKeyCode == 9) || (nKeyCode == 13) || // tab, enter
(nKeyCode == 16) || (nKeyCode == 17) || // shift, ctl
(nKeyCode >= 18 && nKeyCode <= 20) || // alt,pause/break,caps lock
(nKeyCode == 27) || // esc
(nKeyCode >= 33 && nKeyCode <= 35) || // page up,page down,end
(nKeyCode >= 36 && nKeyCode <= 38) || // home,left,up
(nKeyCode == 40) || // down
(nKeyCode >= 44 && nKeyCode <= 45)) { // print screen,insert
return true;
}
return false;
};
/**
* Handles text input box receiving focus.
*
* @param {event} v The focus event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onTextboxFocus = function (v,oSelf) {
oSelf._oTextbox.setAttribute("autocomplete","off");
oSelf._bFocused = true;
oSelf.textboxFocusEvent.fire(oSelf);
};
/**
* Handles text input box losing focus.
*
* @param {event} v The focus event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onTextboxBlur = function (v,oSelf) {
// Don't treat as a blur if it was a selection via mouse click
if(!oSelf._bOverContainer || (oSelf._nKeyCode == 9)) {
// Current query needs to be validated
if(!oSelf._bItemSelected) {
if(!oSelf._bContainerOpen || (oSelf._bContainerOpen && !oSelf._textMatchesOption())) {
if(oSelf.forceSelection) {
oSelf._clearSelection();
}
else {
oSelf.unmatchedItemSelectEvent.fire(oSelf, oSelf._sCurQuery);
}
}
}
if(oSelf._bContainerOpen) {
oSelf._clearList();
}
oSelf._bFocused = false;
oSelf.textboxBlurEvent.fire(oSelf);
}
};
/**
* Handles form submission event.
*
* @param {event} v The submit event
* @param {object} oSelf The auto complete instance
* @private
*/
YAHOO.widget.AutoComplete.prototype._onFormSubmit = function(v,oSelf) {
if(oSelf.allowBrowserAutocomplete) {
oSelf._oTextbox.setAttribute("autocomplete","on");
}
else {
oSelf._oTextbox.setAttribute("autocomplete","off");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -