2011-05-26 76 views
6

我有一個HTML鏈接,我想在用戶遠離它的時候採取一些行動 - 但只有當用戶通過文檔向前瀏覽時,而不是向後瀏覽。使用JavaScript,你怎麼知道用戶是否倒退?

是否有一種可靠的跨瀏覽器方式來檢測用戶在哪個方式中瀏覽文檔,或者確實如果他們通過文檔標籤呢?我綁定了blur事件,但這並不一定意味着該用戶是Tab鍵。

我看了一下檢查的document.activeElement值,或在源前面的聚焦元素的hasFocus屬性,而是:

  1. 那些看起來相對較新的補充,因此可能不廣泛支持,並且
  2. 我不確定他們在blur事件觸發時是否可以檢查,因爲即使用戶在切換,我也不認爲下一個元素將會被集中。
+0

由於您的聲譽相當高,尤其是因爲您擁有** Javascript **,** HTML **和** jQuery **徽章,所以您提出這樣的問題是非常特殊的......我是有點困惑。 :S – 2011-05-26 11:24:59

+1

你想做什麼來回應它?有一個通用的可訪問性指南,不管方向如何,您都不應該「改變上下文」(例如,將焦點移到別處,導航到不同的頁面)以響應焦點更改。在這裏做正確的事情可能取決於你計劃做什麼以應對焦點變化...... – BrendanMcK 2011-05-27 09:42:00

+0

@BrendanMcK:當然 - 我已經決定避免用戶的鍵盤操作這樣詳細的擺弄。我認爲整個事情都是構思不清的。 – 2011-05-31 09:03:51

回答

6

您必須在鏈接本身上處理​​事件。

$("your link selector").keydown(function(evt){ 
    if (evt.which === 9) 
    { 
     if(evt.shiftKey === true) 
     { 
      // user is tabbing backward 
     } 
     else 
     { 
      // User is tabbing forward 
     } 
    } 
}); 

檢查此JSFiddle example檢測特定鏈接上的向前和向後製表符。

旁註:你沒有對你的問題人指定jQuery的標籤,雖然我在回答中提供的jQuery代碼。既然你拿着JavaScript以及jQuery徽章,我想這將是微不足道的你將我的代碼轉換爲純Javascript。

+0

@Robert:當然,我正在考慮這個問題,但我不確定是否檢測到shift鍵有點脆弱。 a)是否檢測到切換鍵可靠的跨瀏覽器? b)shift-tab是否總是用戶在文檔中倒退的方式?對這兩個問題的回答可能是肯定的,但我想我應該問問是否有人比我有更好的主意。 – 2011-05-26 11:46:48

+2

@Paul D. Waite:它不適用於觸控設備。但對於大多數情況下,羅伯特的解決方案非常好。 – oddy 2011-05-26 11:50:16

+0

@Robert:很好回答順便說一句,我會通過幾個瀏覽器運行你的例子,並報告任何潛伏的不兼容性。 – 2011-05-26 12:56:54

1

作爲Robert的一個很好的解決方案的替代方案,也許您可​​以利用tabindex屬性?設置它爲您的HTML鏈接和其他「tabbable」項目。然後在javascript中檢查它。

解的tabindex:jsfiddle

副作用:元素也將在鼠標點擊反應。他們會表現正確。所以這可能是一個很好的副作用或壞的副作用取決於您的需求。

相關問題