JavaScript đặt trọng tâm thành phần tử biểu mẫu HTML


331

Tôi có một mẫu web với một hộp văn bản trong đó. Làm cách nào để cài đặt tiêu điểm vào hộp văn bản theo mặc định?

Một cái gì đó như thế này:

<body onload='setFocusToTextBox()'>

Vì vậy, bất cứ ai có thể giúp tôi với nó? Tôi không biết cách đặt tiêu điểm vào hộp văn bản bằng JavaScript.

<script>
function setFocusToTextBox(){
//What to do here
}
</script>

21
Đơn giản như document.getElementById('your_text_box_id').focus();.
Teemu

Câu trả lời:


575

Làm cái này.

Nếu yếu tố của bạn là một cái gì đó như thế này ..

<input type="text" id="mytext"/>

Kịch bản của bạn sẽ là

<script>
function setFocusToTextBox(){
    document.getElementById("mytext").focus();
}
</script>

3
Bạn sẽ phải quét các tài liệu sử dụng các bộ phận khác của API Web (ví dụ Document.forms, Document.getelementsByTagNamehoặc Node.childNodes) và hoặc dựa trên một cấu trúc tài liệu đã biết hoặc nhìn đối với một số thuộc tính yếu tố cụ thể.
peterph

40
Hoặc câu trả lời rõ ràng ... cung cấp cho nó một ID;)
Có liên quan

4
Tôi sẽ khuyên bạn không nên sử dụng ID vì nó đã được chỉ định. Thay vào đó sử dụng tên hoặc thậm chí một lớp. Trong trường hợp đó, bạn sẽ sử dụng document.querySelector ("[name = 'myText']") hoặc document.querySelector (". MyText") để lấy tham chiếu đến phần tử đầu vào.
Chris Yêu

12
@ChrisLove Lời khuyên thú vị. Tại sao có một id bị "quá chỉ định" và chính xác thì vấn đề với nó là gì? Nó đơn giản hơn, chính xác hơn và mã để xác định vị trí của nó, sẽ nhanh hơn một chút, với một ID. Nó có vẻ như là điều rõ ràng và hợp lý nhất để làm, với tôi - nếu có thể.
PandaWood

4
@ChrisLove điều này không chỉ định quá mức bộ chọn CSS, nó đặt thuộc tính ID HTML - tính đặc hiệu là một vấn đề trong cách xử lý CSS phân tích cú pháp bộ chọn DOM, không phải là vấn đề về cách ID và thuộc tính lớp hoạt động trong HTML. Không nên sử dụng cùng các bộ chọn DOM để đính kèm CSS vì nó có thể đính kèm JS, nghĩa là bạn có thể duy trì sự khác biệt mà bạn mô tả
Toni Leigh

142

Để biết giá trị của nó, bạn có thể sử dụng autofocusthuộc tính trên các trình duyệt tương thích HTML5. Hoạt động ngay cả trên IE kể từ phiên bản 10.

<input name="myinput" value="whatever" autofocus />

51
Hãy nhớ rằng, điều này chỉ hoạt động để thiết lập tiêu điểm khi trang tải lần đầu tiên; nó không thể được sử dụng để đặt tiêu điểm sau này để đáp ứng với đầu vào.
Martin Carney

Tôi sợ thuộc tính tự động lấy nét không tương thích nếu IOS Safari ( caniuse.com/#search=autof Focus) trong khi .f Focus () không tương thích với Opera Mini ( caniuse.com/#search=f
Focus

3
Lưu ý rằng nếu bạn đang cố gắng tập trung từ bảng điều khiển thì không thể!
Hoặc Choban

65

Thông thường khi chúng ta tập trung vào một hộp văn bản, chúng ta cũng nên cuộn vào xem

function setFocusToTextBox(){
    var textbox = document.getElementById("yourtextbox");
    textbox.focus();
    textbox.scrollIntoView();
}

Kiểm tra nếu nó giúp.


2
Đây có thể là một vấn đề đau đầu thực sự trên một màn hình nhỏ hơn nếu trường tắt màn hình :-)
Toni Leigh

Nếu bạn có một thanh tiêu đề được cố định, bạn có thể cần phải sử dụng textbox.scrollIntoView (false), điều này chỉ đơn giản là đặt phần tử xuống dưới thay vì trên cùng.
DeadlyChambers

30

Nếu mã của bạn là:

<input type="text" id="mytext"/>

Và nếu bạn đang sử dụng JQuery, bạn cũng có thể sử dụng điều này:

<script>
function setFocusToTextBox(){
    $("#mytext").focus();
}
</script>

Hãy nhớ rằng bạn phải vẽ đầu vào trước $(document).ready()


11
Tôi đã đánh giá thấp điều này, bởi vì từ xa không có hàm ý của jQuery trong câu hỏi cơ bản. OP muốn duy trì hoàn toàn javascript
Fallenreaper

11
Vâng, bạn có lý do, tôi đã sai, nhưng tôi nghĩ rằng dù sao nó cũng hữu ích.
Richard Rebeco

4
Tôi ủng hộ điều này bởi vì trong các dự án nơi jQuery đã được sử dụng và bạn là thành phần của các đối tượng lựa chọn jQuery, tốt hơn là nên nhất quán thay vì sử dụng vanilla JS.
thiên đường

8
@Fallenreaper Downvotes là dành cho egregiously sloppy, no-effort-expended post, or an answer that is clearly and perhaps dangerously incorrect, theo trung tâm trợ giúp của stackoverflow. Tôi tìm thấy nơi này gần các loại. Giúp đỡ không giới hạn trong OP, phải không?
Gellie Ann

@GellieAnn Trong khi nó là một câu trả lời, nó nằm ngoài phạm vi của câu hỏi OP. Có một lý do tại sao anh ta đang sử dụng javilla javascript, và trong khi bạn có thể đề cập đến các khung khác và đưa ra gợi ý hoặc gợi ý để dẫn đến một lý do tại sao, bạn vẫn nên giải đáp câu trả lời trong giới hạn của câu hỏi. Vì vậy, tôi đứng bên downvote của tôi.
Fallenreaper

20

Đối với Javascript đơn giản, hãy thử như sau:

window.onload = function() {
  document.getElementById("TextBoxName").focus();
};

3

Tôi đã từng sử dụng này:

<html>
  <head>
    <script type="text/javascript">
      function focusFieldOne() {
        document.FormName.FieldName.focus();
      }
    </script>
  </head>

  <body onLoad="focusFieldOne();">
    <form name="FormName">
      Field <input type="text" name="FieldName">
    </form>
  </body>
</html>

Điều đó nói rằng, bạn chỉ có thể sử dụng thuộc tính tự động lấy nét trong HTML 5.

Xin lưu ý: Tôi muốn cập nhật chủ đề cũ này hiển thị ví dụ được hỏi cộng với bản cập nhật mới hơn, dễ dàng hơn cho những người vẫn đọc nó. ;)


1

Như đã đề cập trước đó, document.forms cũng hoạt động.

function setFocusToTextBox( _element ) {
  document.forms[ 'myFormName' ].elements[ _element ].focus();
}

setFocusToTextBox( 0 );
// sets focus on first element of the form

Mẫu AFAIK không có thuộc tính "tên"
Marecky

Các biểu mẫu đã có "tên" từ lâu và trong HTML5, chúng vẫn còn. Xem w3.org/TR/html5/forms.html#the-form-element
Mac


0

window.onload là đặt tiêu điểm ban đầu onblur là đặt tiêu điểm trong khi bạn nhấp bên ngoài vùng văn bản, hoặc tránh làm mờ vùng văn bản

    <textarea id="focus"></textarea>
    <script>
     var mytexarea=document.getElementById("focus");
    window.onload=function()
    {

    mytexarea.focus();

    }

mytextarea.onblur=function(){

mytextarea.focus();

}
    </script>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.