JavaScript ตั้งโฟกัสไปที่องค์ประกอบแบบฟอร์ม HTML


332

ฉันมีเว็บฟอร์มพร้อมกล่องข้อความอยู่ ฉันจะตั้งค่าโฟกัสไปที่กล่องข้อความเป็นค่าเริ่มต้นได้อย่างไร

บางสิ่งเช่นนี้

<body onload='setFocusToTextBox()'>

ใครช่วยฉันได้บ้าง ฉันไม่รู้วิธีตั้งโฟกัสไปที่กล่องข้อความด้วย JavaScript

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

21
document.getElementById('your_text_box_id').focus();ง่ายๆเช่นเดียวกับ
Teemu

คำตอบ:


576

ทำเช่นนี้.

หากองค์ประกอบของคุณเป็นแบบนี้ ..

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

สคริปต์ของคุณจะเป็น

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

3
คุณจะต้องสแกนเอกสารโดยใช้ส่วนอื่น ๆ ของเว็บ API (เช่นDocument.forms, Document.getelementsByTagNameหรือNode.childNodes) และทั้งพึ่งพาโครงสร้างเอกสารที่รู้จักกันหรือมองหาคุณสมบัติขององค์ประกอบบางอย่าง
เตอร์

40
หรือคำตอบที่ชัดเจน ... ให้รหัส;)
เกี่ยวข้อง

4
ฉันจะแนะนำไม่ให้ใช้ ID เพราะเกินกว่าที่ระบุ ใช้ชื่อหรือคลาสแทน ในกรณีนั้นคุณจะต้องใช้ document.querySelector ("[name = 'myText']") หรือ document.querySelector (". myText") เพื่อรับการอ้างอิงถึงองค์ประกอบอินพุต
Chris Love

12
@ChrisLove คำแนะนำที่น่าสนใจ เหตุใดการมีรหัสที่ "เกินที่ระบุ" และอะไรคือปัญหาของมัน มันง่ายกว่าแม่นยำกว่าและรหัสในการค้นหาจะเร็วขึ้นเล็กน้อยด้วย ID ฟังดูเหมือนสิ่งที่ชัดเจนและสมเหตุสมผลที่สุดสำหรับฉัน - ถ้าเป็นไปได้
PandaWood

4
@ChrisLove สิ่งนี้ไม่ได้ระบุตัวเลือก CSS มากเกินไป แต่เป็นการตั้งค่าแอตทริบิวต์ HTML ID - ความจำเพาะเป็นปัญหาในวิธีที่การประมวลผล CSS แยกวิเคราะห์ตัวเลือก DOM ไม่ใช่ปัญหาเกี่ยวกับคุณลักษณะ ID และคลาสใน HTML ไม่แนะนำให้ใช้ตัวเลือก DOM เดียวกันเพื่อแนบ CSS เพื่อแนบ JS กับซึ่งหมายความว่าคุณสามารถรักษาความแตกต่างที่คุณอธิบายได้
Toni Leigh

142

สำหรับสิ่งที่คุ้มค่าคุณสามารถใช้autofocusแอตทริบิวต์บนเบราว์เซอร์ที่ทำงานร่วมกับ HTML5 ได้ ทำงานได้แม้บน IE ในเวอร์ชัน 10

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

51
โปรดทราบว่าจะใช้งานได้เฉพาะเมื่อตั้งค่าโฟกัสเมื่อโหลดเพจครั้งแรกเท่านั้น ไม่สามารถใช้เพื่อกำหนดโฟกัสในภายหลังเพื่อตอบสนองต่ออินพุต
Martin Carney

ฉันกลัวแอตทริบิวต์ autofocus ไม่เข้ากันได้กับ IOS Safari ( caniuse.com/#search=autofocus ) ในขณะที่. focus () ไม่รองรับ Opera Mini ( caniuse.com/#search=focus )
lfrodrigues

3
โปรดทราบว่าถ้าคุณพยายามโฟกัสจากคอนโซลมันเป็นไปไม่ได้!
หรือ Choban

65

โดยปกติเมื่อเรามุ่งเน้นไปที่กล่องข้อความเราควรเลื่อนดู

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

ตรวจสอบว่ามันช่วย


2
นี่อาจเป็นเรื่องปวดหัวจริง ๆ บนหน้าจอที่เล็กกว่าถ้าฟิลด์ปิดหน้าจอ :-)
Toni Leigh

หากคุณมีแถบส่วนหัวที่ได้รับการแก้ไขคุณอาจต้องใช้ textbox.scrollIntoView (false) นี่เป็นการตั้งค่าองค์ประกอบไปที่ด้านล่างแทนที่จะเป็นด้านบน
DeadlyChambers

30

หากรหัสของคุณคือ:

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

และถ้าคุณใช้ JQuery คุณสามารถใช้สิ่งนี้ได้เช่นกัน:

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

โปรดทราบว่าคุณต้องวาดอินพุตก่อน $(document).ready()


11
ฉันลงคะแนนเพราะสิ่งนี้ไม่มีความเกี่ยวข้องของ jQuery ในคำถามพื้นฐาน OP ต้องการอยู่จาวาสคริปต์อย่างหมดจด
Fallenreaper

11
คุณมีเหตุผลฉันผิดพลาด แต่ฉันคิดว่ามันมีประโยชน์อยู่ดี
Richard Rebeco

4
ฉัน upvoting นี้เพราะในโครงการที่มีการใช้ jQuery และองค์ประกอบของคุณเป็นวัตถุการเลือก jQuery มันจะดีกว่าที่จะสอดคล้องกันแทนที่จะใช้วานิลลา JS
สวรรค์

8
@Fallenreaper Downvotes ใช้สำหรับegregiously sloppy, no-effort-expended post, or an answer that is clearly and perhaps dangerously incorrectอ้างอิงจากศูนย์ช่วยเหลือของ stackoverflow ฉันพบสิ่งนี้ใกล้กับหมวดหมู่เหล่านั้น การช่วยเหลือไม่ได้ จำกัด อยู่ที่ OP ใช่หรือไม่
Gellie Ann

@GellieAnn แม้ว่าจะเป็นคำตอบ แต่อยู่นอกขอบเขตของคำถาม OPs มีเหตุผลที่เขาใช้วานิลลาจาวาสคริปต์และในขณะที่คุณสามารถพูดถึงกรอบอื่น ๆ และให้พอยน์เตอร์หรือคำแนะนำเพื่อนำไปสู่หนึ่งและให้เหตุผลว่าทำไมคุณยังควรแก้ไขคำตอบจากภายในขอบเขตของคำถามที่ถาม ดังนั้นฉันยืนตามโหวตของฉัน
Fallenreaper

20

สำหรับ Javascript ธรรมดาให้ลองทำดังนี้:

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

3

ฉันเคยใช้สิ่งนี้:

<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>

ที่กล่าวมาคุณสามารถใช้คุณลักษณะโฟกัสอัตโนมัติใน HTML 5

โปรดทราบ: ฉันต้องการอัปเดตเธรดเก่านี้ซึ่งแสดงตัวอย่างที่ถามพร้อมกับการอัปเดตที่ใหม่กว่าและง่ายกว่าสำหรับผู้ที่ยังอ่านข้อความนี้อยู่ ;)


1

ดังกล่าวก่อนหน้าdocument.formsทำงานด้วย

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

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

แบบฟอร์ม AFAIK ไม่มีแอตทริบิวต์ "name"
Marecky

แบบฟอร์มมี "ชื่อ" มาเป็นเวลานานและใน HTML5 พวกเขายังคงทำ ดูw3.org/TR/html5/forms.html#the-form-element
Mac

1

หากคุณสมบัติของคุณ<input>หรือ<textarea>มีid=mytextแล้วให้ใช้

mytext.focus();


0

window.onload คือการวางโฟกัสในขั้นต้น onblur คือการใส่โฟกัสในขณะที่คุณคลิกที่ด้านนอกของ textarea หรือหลีกเลี่ยงพื้นที่ข้อความเบลอ

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

    mytexarea.focus();

    }

mytextarea.onblur=function(){

mytextarea.focus();

}
    </script>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.