2012-03-07 87 views
21

有些想法是,ELEMENT_ID.focus()是在某些時候隱藏的div內部。jquery .focus()不起作用的原因是什麼?

這應該是容易解決的問題 - 但我掙扎:(

***代碼工作正常 - 文本字段沒有被集中在頁面加載了

STEP1 [解決] JAVASCRIPT:

$("#goal-input").focus(); 

$('#goal-input').keypress(function(event){ 
var keycode = (event.keyCode ? event.keyCode : event.which); 
    if(keycode == '13') { 
etc, etc, etc 
} 

HTML

<input type="text" id="goal-input" name="goal" /> 

[STEP2] JAVASCRIPT:

if (goal) { 
      step1.fadeOut('fast', function() { 
      step1.hide(); 
      step2.fadeIn('fast'); 

etc, etc 

HTML:

<div id="step-2"> 
     <div class="notifications"> 
     </div> 
     <input type="text" id="name" name="name" placeholder="Name" /> 
       <script type="text/javascript"> 
       $(function(){ 
       $("#name").focus(); 
       }); 
      </script> 

爲什麼沒有第2步的工作? :(

+3

一些示例代碼如何? - 根據['.focus()'](http://api.jquery.com/focus/)上的jQuery文檔:嘗試將焦點設置爲隱藏元素會導致Internet Explorer中出現錯誤。注意只在可見的元素上使用.focus()。要運行元素的焦點事件處理程序而不將焦點設置到元素上,請使用.triggerHandler(「focus」)而不是.focus()。 – Morgon 2012-03-07 05:47:02

+0

你是什麼意思「不工作」?例如。,代碼運行時沒有報告任何錯誤,但是焦點沒有按照你的意願設置,或者瀏覽器是否給出錯誤? – nnnnnn 2012-03-07 05:53:17

+0

提供了示例代碼和什麼「不工作」的意思(文本字段不關注)@nnnnnn – dngoo 2012-03-07 06:29:23

回答

12

您需要可以把HTML或負載下面的代碼,如果使用文件裝載事件:

<input type="text" id="goal-input" name="goal" /> 
<script type="text/javascript"> 
$(function(){ 
    $("#goal-input").focus(); 
}); 
</script> 

更新:

切換的div不會觸發因爲一切都已經被加載文檔加載事件。你需要,當你切換div來關注它:

if (goal) { 
     step1.fadeOut('fast', function() { 
      step1.hide(); 
      step2.fadeIn('fast', function() { 
       $("#name").focus(); 
      }); 
     }); 
} 
+2

我會盡量說,所有與DOM相關的代碼應該總是進入DOM負載處理程序中,而不管它與目標的相對位置。 :) – Morgon 2012-03-07 06:34:12

+0

演示:http://jsfiddle.net/BXpkY/ – 2012-03-07 06:37:18

+0

這表明,簡單地隱藏和顯示父'div'應該改變'$ .focus()'射擊:http://jsfiddle.net/3Sz8Z/ – 2012-03-07 06:41:25

3

嘗試是這樣的,當你申請集中這樣,如果該元素是隱藏的,它不會引發錯誤:

$("#elementid").filter(':visible').focus(); 

它可能更有意義,使元素可見,雖然這將需要特定的代碼到你的佈局

5

不要忘了,輸入字段必須是可見光第一,此後你能夠集中精力了。

$("#elementid").show(); 
$("#elementid input[type=text]").focus(); 
25

我有被轉變到頁面的元件(一個形式輸入)上觸發了焦點問題。我發現它可以通過在setTimeout中調用焦點事件而無延遲地修復。據我所知(例如,從this answer),這延遲了功能,直到當前執行隊列結束,所以在這種情況下它延遲焦點事件,直到轉換完成。

setTimeout(function(){ 
    $('#goal-input').focus(); 
}); 
+0

這對我有用,ty! – 2016-01-20 11:31:04

+0

高招... – 2016-06-27 13:17:25

+0

我只好用600超時前,它開始工作,所以'的setTimeout(函數(){$( '#目標輸入')專注();},600);'在上面的例子。 – SharpC 2016-11-17 12:56:55

3

我發現,試圖獲得焦點的文本元素(如通知div)時focus不工作,而是着眼於輸入字段時不工作。

相關問題