2011-04-14 29 views
12

在我們的產品中,我們正在ASP.NET網站中使用最新的jQuery Mobile開發版本。每次我們進行ASP.NET回發時,瀏覽器窗口都會顯示在屏幕的後面。IE9窗口因jQuery Mobile而失去焦點

實施例:

  • 最大化任何窗口。示例:Visual Studio,Word,Windows資源管理器。
  • 通過它最大化IE9。 IE9是您在屏幕上看到的唯一的 。
  • 單擊我們的解決方案中的一個按鈕,該按鈕發送 回發。
  • IE9不再可見。 無論是其背後現在有重點 (和填充屏幕,因爲它是 最大化)

我只知道解決方法:

  • 不包括jQuery Mobile的腳本。
  • 確保IE9是Windows中唯一最大化的窗口。

我不知道jQuery Mobile在後臺做了些什麼,我認爲這是IE9中的一個bug,最終會被修復。但是,如果您有關於如何防止在此期間發生的任何提示,那就太好了。

編輯:似乎它不是在每一個回發。它在執行Response.Redirect的每個回傳中都是如此。我應該補充說,我所有的回傳都是使用ASP.NET AJAX,而不是完整的回傳。

+5

PS:我很驚訝的是,JavaScript可以影響這種方式windows操作系統。 – 2011-04-14 00:48:11

+0

你有你的應用程序調試模式附加到VS? – 2011-04-14 00:49:19

+0

沒有。即使是在外部服務器上完成。 – 2011-04-14 00:53:09

回答

16

我知道這是舊的文章,但對於人們來到這裏,從谷歌:

我今天遇到了同樣的問題。看來這種失去焦點的行爲是IE在窗口對象上觸發模糊事件時所做的。這是造成這個問題對我來說代碼:當有重點沒有其他元素

$(document.activeElement).blur(); 

activeElement將默認爲主體元素,然後將模糊事件冒泡到窗口。要解決這個問題,我只是做了一個檢查:

if (document.activeElement != $('body')[0]) { 
    $(document.activeElement).blur(); 
} 
+0

這是有道理的,但我沒有時間正確地測試它,因爲我們發現了另一種解決方法(Chrome Frame,heh):) – 2012-09-07 17:56:08

10

我有類似的問題IE10和jQuery 1.7.2。 我發現我在這行代碼:

$(document.activeElement).blur(); 

$(':focus').blur(); 

因此,添加簡單的。不是( '身體')解決問題:

$(document.activeElement).not('body').blur(); 
$(':focus').not('body').blur(); 
+0

寫得很好的答案和優雅的解決方案,爲我工作,非常感謝! – 4imble 2013-08-13 16:23:52

0

同樣的問題似乎與jQuery Mobile 1.4.2一起發生。

當使用IE 10時,打開單個選項卡並在同一監視器上顯示另一個窗口,如果打開彈出窗口,則會將瀏覽器發送到後臺。

要解決此問題,您必須編輯_handleDocumentFocusIn函數。您需要更改讀取的行(10391):

target.blur();

if (targetElement.nodeName.toLowerCase() !== "body") 
{ 
    target.blur(); 
} 

我做了一個拉請求,所以希望這將被包含在下一版本中。

0

只是將此鏈接發佈給任何正在經歷更多這種持續混亂的人。我在Angular location資源中的window.location ='BLAH'上看到了IE 9和IE 10上的問題。

這似乎不是解決問題的我,但它可以幫助別人:

http://support.microsoft.com/kb/2600156/en-us