看本文得先了解以下幾個事件(摘自w3c)。
blur事件: 當元素失去焦點時發生 blur 事件。
focus事件:focus() 方法用來賦予文字域焦點(也值讓某些元素得到焦點事件)。
tabIndex屬性:tabIndex 屬性可設定或傳回按鈕的 tab 鍵控制順序。
我們都知道blur只是針對form表單控制項的,而對於span , div , li 之類的,則沒辦法觸發它們的動作,現在我們只需要設定一個tabindex屬性則可以觸發它們的焦點事件了。
真實專案碼:
PopupMenu.prototype._createPopup=function(){
var popupDiv = $('
'); //建立div
popupDiv.appendTo(this._owner.element); //將div加span
var _popup=popupDiv[0];
_popup.hide=function(){
popupDiv.hide();
},
_popup.show=function (){
popupDiv.show();
popupDiv.focus();
//讓div得到焦點
};
popupDiv.blur(function(){
popupDiv.hide();
});
return _popup;
}
這段程式碼的意思是我用div模擬一個createPopup(IE可以直接產生),產生的時候給它一個tabindex屬性,然後加入span,然後讓它支援顯示隱藏。特別值得注意的是popupDiv,focus(),必須要給div一個焦點,否則它沒有焦點如何失去焦點。