2010-05-03 24 views
3

我試圖在輸入區域實現光標焦點,IE給了我很多頭痛的問題。我已經嘗試沿線(改變超時太多,以大數字)的事情:在IE中防止焦點的小應用程序

setTimeout(function() { document.getElementById('myInput').focus(); }, 10); 

它不會工作。我注意到,我在頁面上也有一個小程序,當我刪除小程序時,上述工作。此外,如果我在focus()觸發器之前放置了警報,它將起作用。

該小程序沒有做任何特別的事情(它實際上檢索用戶的MAC地址),它在一端調用外部JS函數來發送MAC地址給DOM。我試着把焦點(超時和所有)放在那個JS函數的末尾,但那也行不通。

什麼可能是錯的?事情在Firefox中運行良好,只是不在IE中。

當前設置:

//This is called from within the applet using a window.call 
function everythingDone() 
{ 
$("#someinput").focus(); 
//setTimeout(function() { document.getElementById('someInput').focus(); }, 1000); 
}; 

$(function() 
{ 
    var applet = "<object classid='clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA' width='0' height='0'><param name='code' value='someapplet.class' /><param name='archive' value='/someapplet.jar' /></object>"; 
    $("#appletarea").html(applet); 
    //setTimeout(function() { document.getElementById('someInput').focus(); }, 1000); 
}); 

回答

2

這是Sun的Java插件IE的臭名昭著的bug。你可以在 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4984794找到一個完整的討論。 不幸的是該錯誤已關閉,因爲不可重現!在所提出的解決方法,下面的工作對我來說很大:

Crookster

如果有人有興趣,我相信我 找到一個辦法解決這個。

在你的applet start()方法中,添加以下 :

的JPanel面板=新JPanel(); this.add(panel); panel.addFocusListener(新 FocusAdapter(){公共無效 focusGained(FocusEvent e)在{JSObject 贏=(JSObject) JSObject.getWindow(本); win.eval( 「onAppletLoad();」);}} ); panel.requestFocusInWindow();

然後,你的HTML代碼中,添加 以下功能:

功能onAppletLoad(){ myField.focus(); // myField的地方是 該領域獲得焦點! }

你必須導入 小程序

進口netscape.javascript以下*。 // JSObject類,用於獲取HTML 頁面

並將plugin.jar添加到您的類路徑中。 您將您的JRE /jre/lib目錄中找到plugin.jar版本(1.4.x +)

雖然小應用程序有一個JPanel,只是 大小設置爲0,0,你不會看到它 。

希望這有助於

肖恩

8

我認爲,一個簡單的解決方法是使用initial_focus參數的小程序/對象/嵌入標籤。

<applet ...> 
    <param name="initial_focus" value="false"/> 
</applet> 
+0

謝謝!我嘗試了'setFocusable(false)'成功,但是這個效果很好! – Andy 2012-06-28 02:21:46

+0

謝謝你,我花了4個小時試圖找出什麼是偷竊焦點,以及如何防止它。這是解決方案。 – Oversteer 2012-09-03 16:39:29

+0

也爲我工作:IE9 + JRE 6u45 – 2013-05-30 15:35:27