簡體   English   中英

確定什么觸發了焦點事件?

[英]Determine what triggered focus event?

我需要確定導致焦點事件的原因。

理想情況下,我想區分單擊、選項卡/鍵盤輸入和手動(通過代碼)觸發器。

我怎樣才能做到這一點?

我正在查看事件 object,但我沒有看到任何太有用的東西。

如果焦點來自$x.focus()調用,則該事件將沒有originalEvent屬性,因為沒有來自瀏覽器的事件,所以:

if(ev.hasOwnProperty('originalEvent')) {
    // Focus event was manually triggered.
}

為了區分基於鍵盤和鼠標的焦點事件,您可以嘗試將keydown處理程序綁定到其他所有內容以檢測TabShift-Tab但這將是一個嚴重的黑客攻擊並且可能不可靠; 例如,在 iPad 上,您沒有按Tab鍵移動到下一個字段,而是在彈出鍵盤中按NextPrevious來移動,這些可能根本不會注冊為按鍵。

還有一個類似的關於click事件的問題可能也很有趣:

在 jQuery 中,如何區分程序點擊和用戶點擊?

正如您在評論中指出的那樣,您可以捕獲click事件以檢測基於鼠標的焦點更改並在某處設置標志以記住它。 然后你會有這個:

  1. 如果 jQuery 事件中沒有originalEvent ,則手動觸發焦點更改(即$x.focus()或類似的)。
  2. 如果設置了單擊處理程序標志,則焦點更改來自鼠標操作。
  3. 否則焦點變化來自鍵盤事件。

您必須注意單擊和焦點事件的順序正確,並且您需要確保在完成后清除標志。 這可能不是防彈的,但也許不需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM