讓元素獲得焦點

2021-09-05 23:38:15 字數 1006 閱讀 2900

一般而言,只有表單元素與鏈結才能使用focus與blur事件,因此jquery對於許多元素就歇菜了。但只要為元素節點設定乙個tabindex屬性,非表單元素也可能使用這兩種事件。

但預設能使用焦點事件的元素一般也支援tabindex事件。為什麼這麼說呢?因為實質上,預設支援焦點事件的元素並不只這些,ie還預設body, frame, iframe, img, isindex, object具有獲取失去焦點的能力。對於其他標準瀏覽器,它們之間還可能存在差異。因此我們不能單純地通過排除法,為非焦點元素新增tabindex屬性。而是轉而用一種更好的方法,通過檢測當前元素是否已經(顯式地或隱式地)設定了該屬性,才做進一步的操作。如下是檢測函式:

var hasattr = function(el, name)
如果返回值為false,我們就為該元素設定tabindex屬性。對於tabindex屬性,w3c對此也作出相應現範。如果tabindex為負數,那麼元素就不能使用tab鍵進行導航,但還能獲得焦點。如果位於 0 到 32767之間,則可以根據tabindex的值進行導航。如果當幾個元素的tabindex同為零時,則以文件流的順序執行導航。更多與tabindex相關的資料,可以參看我的另一篇文章。

通過上面的分析,無疑將tabindex設為負數最安全,這樣就不會破壞原有的tab導航系統。順便一提,獲得焦點後,元素有乙個虛線框,總有人挖空心思把它去掉。其實這無疑是對頁面易用性的踐踏,我們還要考慮一下某些特殊人群的需要,如不用滑鼠的高手,滑鼠壞了的可憐人或是視力有缺陷的人群。有文章介紹,去掉虛線框在美國是違法的,這是對視力障礙者的一種歧視!

下面給出完整的程式:

var hasattr = function(el, name)

var addevent = function(obj,type,callback) else if ( obj.attachevent )

}var focus = function(el,fn));

}

讓元素獲取焦點

執行**

視窗顯示時讓字段獲得焦點

這是ext群裡一位大蝦提供的解決方案。通常情況下,在視窗顯示時,也就是在視窗的show事件中,直接使用focus方法讓字段獲得焦點,會因為瀏覽器內部處理而丟失焦點。解決辦法就是延遲執行focus,在api中,ext.form.field.base的focus方法的說明如下 focus boolean...

jquery獲得焦點和失去焦點

前端 中如果存在一些讓使用者填寫內容的表單元素的話,我們可以使用jq中獲得焦點事件和失去焦點事件,來給使用者作出一些提示的內容。今天我們就說一說jquery下獲得焦點和失去焦點的事件的使用方法。focus 方法 當通過滑鼠點選選中元素或通過 tab 鍵定位到元素時,該元素就會獲得焦點。語法 sele...

控制項失去焦點與獲得焦點

1.失去焦點 讓控制項失去焦點的方法,就是給該控制項傳送乙個wm killfocus的訊息。可以通過下面三種方式實現 1使用cwnd類的postmessage getdlgitem 控制項id號 postmessage wm killfocus,0,0 2獲取控制項的控制代碼,然後通過控制代碼直接給...