2015-12-09 111 views
1

我的目標是在彈出窗口中打開一個input元素並集中該輸入。奇怪的焦點()行爲

因此在邏輯上,我試過$('#input').focus()$('#input').first().focus()$('#input')[0].focus(),但它們不起作用;但是當我更改標籤並返回到我的標籤時,input元素處於焦點。有人看過類似的東西嗎?或知道如何解釋這個,甚至更好,知道如何解決這個問題...

P.S.對於評論:是的,它是我的網頁上唯一的id爲「輸入」的輸入,是的,我的頁面上有一個ID爲「input」的input元素,是的,在添加input後調用了調焦元素代碼到了最後。

+1

從某些其他事件處理程序(如切換選項卡的某些內容)調用'.focus()'可能會出現問題。根據我的經驗,您可以通過將焦點調用包裝在超時處理程序中來解決它,並且超時時間很短。而'$(「#input」)。focus()'是你所需要的(在超時處理程序中)。 – Pointy

+0

P.P.S:不,你沒有提供任何MCVE :)但我想波蒂是正確的。還有一件事,隱藏的元素不能集中,也許這是更相關的,然後集中它一旦顯示 –

+1

另請參見[爲什麼setTimeout(FN,0)有時有用?](http://stackoverflow.com/questions/779379/why -is-settimeoutfn-0-sometimes-useful) –

回答

0

從我上面的評論,這裏就是我的建議:

setTimeout(function() { 
    $("#input").focus(); 
}, 0); 

這種安排可以讓當前事件線程完成,包括瀏覽器要執行任何「原生」的行動。然後超時可以在頁面狀態的唯一改變將設置焦點的上下文中運行。

1
window.load = function(){$("#input").focus();} 

基本上window.load是當頁面的所有元素被加載僅觸發該事件。

您可以在任何地方的頁面內添加上述代碼。最好在<script type="javascript"> </script>.以內的頁面的最後加載所有元素後,它將焦點設置到輸入字段。

+1

隨着解釋一個很好的答案變得有用回答。 – wmk

+0

基本上,windows.load是當頁面的所有元素都被加載時纔會觸發的事件。 您可以在任何地方的頁面內添加上述代碼。最好在JavaScript腳本的最後一頁。因此,加載所有元素後,它會將焦點設置爲輸入字段。 –

+0

我使用「編輯」功能將您的評論添加到答案中。感謝您的解釋! – wmk