2012-10-16 34 views
2

如果這是重複的,我很抱歉,但我無法找到我的問題的答案。如果你知道它已經被回答的地方,請給我一個鏈接。在Chrome上獲得焦點元素模糊

我正在使用jquery將函數綁定到文本框的onblur事件。 目標是僅當焦點離開tblUserDetails表中的文本框時觸發回發。 當文本框失去焦點時:

  • 在IE中,新的焦點元素是新選定的文本框。
  • 在Chrome中,文檔會聚焦在兩個文本框之間,因此$(document.activeElement)永遠不會指向新選擇的文本框。

這裏是我的代碼,這在IE工作,但無法在Chrome:

SaveNetworkDetails: function() { 

    // Trigger the blur event when one of the textboxes loses focus 
    $("[id$=tblUserDetails]").find('input[id*="txt"]').blur(function (e) { 

     // Check if the new focused element is among the textboxes 
     if ($(document.activeElement).parents("[id$=tblUserDetails]").length == 0) { 
      // Trigger postback 
     } 
    }); 
} 

我如何才能找到在Chrome中綁定到模糊事件的函數新選定的文本?

問候,

吉爾斯

+0

我認爲Chrome正在做正確的事情。 [HTML5規範](http://www.w3.org/TR/2011/WD-html5-20110113/editing.html#focus-management)說,將焦點分配給新元素時,首先運行「無焦點步驟「爲舊的。它們是單獨的操作,並且在新元素變爲活動狀態之前發生模糊事件。我不認爲你打算在模糊處理程序中訪問新的目標。 – Barmar

+0

嗨巴爾馬,感謝您的有趣的鏈接。我會不同意你的意見。同樣的文檔中說:「當一個被聚焦的元素停止成爲一個可聚焦的元素,或者停止聚焦而沒有另一個元素明確地聚焦於它時,用戶代理應該同步地運行body元素的聚焦步驟,如果有一個」 。在我的情況下,另一個文本框是明確的重點,所以瀏覽器不應該專注於中間的文檔。或者至少它應該讓我訪問新的焦點文本框,作爲啓動模糊事件的文本框。 – Gilles

+0

我沒有看到該段落如何改變聚焦步驟的​​步驟3(使新元素成爲聚焦元素)直到_after_步驟2(在舊元素上運行未聚焦步驟)才發生。 「同步」並不意味着「同時」。最好的情況是,當你將焦點移動到一個新的元素時,這會讓不清楚活動元素應該是什麼,而未聚焦的事件正在運行。 – Barmar

回答

1

一個小誤解,在這裏:.blur()不會觸發blur事件,它結合了模糊事件的函數,這意味着當模糊時設置將被觸發的功能。

也許這種誤解是你問題的根源。

更新

我重新閱讀的問題,現在我看你想要達到的目的。儘管你的文本導致人們認爲你正在編程式地觸發模糊,但你的問題是,在chrome中,文檔在控制權留下時會獲得臨時焦點。

而不是在第一個輸入的模糊上觸發回發,您應該觸發下一個輸入焦點的回發。根據我在代碼中看到的情況,這種改變並不重要,但可以解決您的問題。

+0

嗨阿德里安。對不起,沒有使用正確的術語。事件被觸發並且綁定到事件的函數被調用。我的問題更多的是這樣一個事實,即焦點變化似乎是在IE中一步完成的(從失去焦點的元素變爲獲得焦點的元素),並在Chrome中分兩步(從失去焦點的元素開始記錄文件,然後從文件到獲得焦點的要素)。在綁定到blur事件的函數中,我可以訪問第一步獲取焦點的元素(即Chrome中的文檔),但不能訪問最後一個元素。 Gilles – Gilles

+0

我編輯了這個問題,希望它更清楚。 :-) – Gilles

+0

阿德里安。這聽起來像一個好主意。我想我失去了我正在做的事情。讓我試着按照你的建議去做,我會將其標記爲答案。 – Gilles