2010-10-26 32 views
24

這是一個棘手的開始一個早晨。jQuery動態聚焦於第一個INPUT或Textarea

我有一系列的圖標。當你點擊一個圖標時,它會加載一個表單。一些表單有輸入[文本]其他人有textareas。

我在想什麼是jQuery,一旦我加載的形式,我可以運行,將...聚焦在第一個輸入或textarea無論它可能是動態的,所以我不需要如果塊。

想法?

+0

你可以發佈加載你的新表單的代碼嗎? – Patricia 2010-10-26 17:18:11

回答

58

這應該這樣做,我認爲

$("#formId input:text, #formId textarea").first().focus(); 
+0

那樣做了,謝謝! – TheExit 2010-10-26 17:17:48

+1

+1這個也適用。忽略我的答案。 – 2010-10-26 17:19:54

+0

@ user485680:如果你接受這個答案,我將不勝感激:) – Onkelborg 2010-10-26 17:20:16

4

編輯

這實際上並沒有很大的溶液中。下面的Patricia's和Onkelborg的解決方案更加優雅。

var $firstInput = jQuery("input:first"); 
var $firstTextArea = jQuery("textarea:first"); 

if(firstInput.length == 0) { 
    $firstTextArea.focus(); 
} 

else { 
    $firstInput.focus(); 
} 
+0

嗯不工作。難道是因爲我使用AJAX將表單注入頁面? – TheExit 2010-10-26 17:15:52

+0

@ user485680:不,AJAX與它無關。你用form的id替換了「formId」嗎? – Onkelborg 2010-10-26 17:16:44

9

一些代碼將是很好的..但這個應該很容易。

假設你加載你的到,你知道的id一個div ....

所有你需要做的是一樣的東西

​​

已加載後您的形式

+1

+1忽略我的答案。Patricia's是對的。 – 2010-10-26 17:19:25

+0

這又是jQuery的力量,'dothis.dothat.thendothis'我喜歡它! – 2010-10-26 17:25:11

+0

好的解決方案。但是如果你的第一個輸入元素是一個隱藏的輸入字段。你應該使用:$('#TheIdOfYourFormDiv')。find('input:text,textarea')。first()。focus() – Dirk 2015-11-21 12:52:32

10
$(":input:first").focus(); 

:input選擇器抓取所有輸入,textarea,選擇和按鈕元素。

+0

+1爲最短,最易讀的一個 – 2013-01-02 17:45:11

+0

它還選擇一個隱藏的輸入元素,如果您的第一個元素被隱藏,它將無法使用。 – 2015-06-12 10:07:19

37

這:

$('#form-id :input:enabled:visible:first').focus(); 

#形式-id爲形式的ID; :輸入選擇任何輸入和textarea元素; :啓用確保輸入是可編輯的; :viisble確保元素可見; :第一是明顯

+2

+1提醒我,我已隱藏輸入:) – 2013-02-15 18:32:05

+3

這應該是正確的答案 – 2015-04-02 17:33:24

+0

或甚至更好,如果你不希望頁面底部的提交按鈕被聚焦(頁面滾動到一半):$('form:input:enabled:visible:first')。not(':input [type = button],:input [type = submit],:input [type = reset]') 。焦點(); – RWC 2017-12-19 13:43:12

1

它爲我工作負載事件。

$('#Div').find('input:first').focus(); 
0

因爲:可見是一個jQuery擴展且不部分CSS 說明書,使用查詢:可見不能利用由本機DOM querySelectorAll() 方法提供的 性能提升。要在使用時達到最佳性能:選擇 元素可見,請首先使用純CSS選擇器選擇元素,然後使用.filter(「:visible」)選擇 。

使用,而不是:

$('form').filter(':input:first').focus(); 

或:

$('input').first().focus(); //as shown in the "correct" answer. 

的同時也要記住使用.focus()

試圖將焦點設置到一個隱藏的元素時,會導致錯誤 Internet Explorer。注意僅在可見的 元素上使用.focus()。要在元素的焦點未設置 時運行元素的焦點事件處理程序,請使用.triggerHandler(「focus」)而不是 .focus()。

1

這是我的解決方案。該代碼應該很容易遵循,但這裏的理念是:

  • 得到所有的輸入,選擇和文字區域
  • 過濾掉所有按鈕和隱藏字段
  • 過濾器才啓用,可見字段
  • 選擇第一個
  • 焦點所選字段

的代碼:

function focusFirst(parent) { 
    $(parent).find('input, textarea, select') 
     .not('input[type=hidden],input[type=button],input[type=submit],input[type=reset],input[type=image],button') 
     .filter(':enabled:visible:first') 
     .focus(); 
} 

然後只需調用focusFirst與您的父元素或選擇器。

選擇:

focusFirst('#parentId'); 

元素:

var el = $('#parentId'); 
focusFirst(el); 
1

這裏有一種對@craztmatt和其他人最重要的是制定引導模態的解決方案。我已經擴展到在觸發事件的模式中選擇目標元素。這一個捕獲輸入,textarea和選擇元素。

// do this to make bootstrap modals auto-focus. 
// delegate to body so that we only have to set it up once. 
$('body').on('shown.bs.modal', function (e) { 
    var ele = $(e.target).find('input[type=text],textarea,select').filter(':visible:first'); // find the first input on the bs modal 
    if (ele) {ele.focus();} // if we found one then set focus. 
}) 

不完全是OP的問題,但也應該適應純jQuery的情況。