ช่องใส่โฟกัสเมื่อโหลด


98

เคอร์เซอร์จะโฟกัสไปที่ช่องป้อนข้อมูลเฉพาะในการโหลดหน้าได้อย่างไร?

เป็นไปได้หรือไม่ที่จะรักษาค่าข้อความเริ่มต้นและวางเคอร์เซอร์ไว้ที่ส่วนท้ายของอินพุต?

<input type="text"  size="25" id="myinputbox" class="input-text" name="input2" value = "initial text" />

คำตอบ:


175

คำถามของคุณมีสองส่วน

1) จะเน้นอินพุตในการโหลดหน้าอย่างไร?

คุณสามารถเพิ่มautofocusแอตทริบิวต์ให้กับอินพุตได้

<input id="myinputbox" type="text" autofocus>

อย่างไรก็ตามสิ่งนี้อาจไม่ได้รับการสนับสนุนในทุกเบราว์เซอร์ดังนั้นเราจึงสามารถใช้จาวาสคริปต์ได้

window.onload = function() {
  var input = document.getElementById("myinputbox").focus();
}

2) จะวางเคอร์เซอร์ไว้ที่ท้ายข้อความที่ป้อนได้อย่างไร?

นี่เป็นทางออกที่ไม่ใช่ jQuery ด้วยรหัสที่ยืมมาจากคำตอบ SO อีก

function placeCursorAtEnd() {
  if (this.setSelectionRange) {
    // Double the length because Opera is inconsistent about 
    // whether a carriage return is one character or two.
    var len = this.value.length * 2;
    this.setSelectionRange(len, len);
  } else {
    // This might work for browsers without setSelectionRange support.
    this.value = this.value;
  }

  if (this.nodeName === "TEXTAREA") {
    // This will scroll a textarea to the bottom if needed
    this.scrollTop = 999999;
  }
};

window.onload = function() {
  var input = document.getElementById("myinputbox");

  if (obj.addEventListener) {
    obj.addEventListener("focus", placeCursorAtEnd, false);
  } else if (obj.attachEvent) {
    obj.attachEvent('onfocus', placeCursorAtEnd);
  }

  input.focus();
}

นี่คือตัวอย่างของวิธีที่ฉันจะทำสิ่งนี้ให้สำเร็จด้วย jQuery

<input type="text" autofocus>

<script>
$(function() {
  $("[autofocus]").on("focus", function() {
    if (this.setSelectionRange) {
      var len = this.value.length * 2;
      this.setSelectionRange(len, len);
    } else {
      this.value = this.value;
    }
    this.scrollTop = 999999;
  }).focus();
});
</script>

3
บล็อกรหัสแรกที่แนะนำจะวางเคอร์เซอร์ไว้ที่ส่วนท้ายของค่าที่มีอยู่เช่นกันซึ่งทำงานได้ดี ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ
Codex73

46

โปรดทราบ - ตอนนี้คุณสามารถทำได้ด้วย HTML5 โดยไม่ต้องใช้ JavaScript สำหรับเบราว์เซอร์ที่รองรับ:

<input type="text" autofocus>

คุณอาจต้องการเริ่มต้นด้วยสิ่งนี้และต่อยอดด้วย JavaScript เพื่อเป็นทางเลือกสำหรับเบราว์เซอร์รุ่นเก่า


ยินดีที่ได้ทราบว่าสิ่งนี้ย้ายเคอร์เซอร์ไปที่ตำแหน่งสุดท้ายในช่องป้อนข้อมูลแล้วหรือยัง
Camilo Díaz Repka

1
ฉันไม่คิดว่า @ Codex73 พยายามที่จะบรรลุสิ่งที่แอตทริบิวต์ตัวยึดตำแหน่งใน HTML5 ทำ ดูเหมือนว่าเขาต้องการให้เคอร์เซอร์วางตำแหน่งโดยอัตโนมัติเมื่อสิ้นสุดค่าใดก็ตามที่อยู่ในอินพุต
jessegavin

2
คุณพูดถูกนี่ไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์ แต่สิ่งนี้จะช่วยแก้ปัญหาได้สองสามอย่าง (ออโต้โฟกัสและข้อความตัวยึดตำแหน่ง)
David Calhoun

โปรดทราบว่าในวันที่ 1/2019 Safari บน iOS ไม่รองรับสิ่งนี้: caniuse.com/#feat=autofocus
sporker


3
function focusOnMyInputBox(){                                 
    document.getElementById("myinputbox").focus();
}

<body onLoad="focusOnMyInputBox();">

<input type="text"  size="25" id="myinputbox" class="input-text" name="input2" onfocus="this.value = this.value;" value = "initial text">

2

วิธีทำแบบพกพาคือการใช้ฟังก์ชันที่กำหนดเอง (เพื่อจัดการความแตกต่างของเบราว์เซอร์) เช่นนี้นี้

จากนั้นตั้งค่าตัวจัดการonloadที่ส่วนท้ายของ<body>แท็กของคุณตามที่ jessegavin เขียนว่า:

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



0

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน:

<form name="f" action="/search">
    <input name="q" onfocus="fff=1" />
</form>

fff จะเป็นตัวแปรโกลบอลซึ่งชื่อไม่เกี่ยวข้องอย่างยิ่งและเป้าหมายใดที่จะหยุดเหตุการณ์ onload ทั่วไปเพื่อบังคับโฟกัสในอินพุตนั้น

<body onload="if(!this.fff)document.f.q.focus();">
    <!-- ... the rest of the page ... -->
</body>

จาก: http://webreflection.blogspot.com.br/2009/06/inputfocus-something-really-annoying.html


0

หากคุณไม่สามารถเพิ่มแท็ก BODY ได้ด้วยเหตุผลบางประการคุณสามารถเพิ่มสิ่งนี้ได้หลังจากแบบฟอร์ม:

<SCRIPT type="text/javascript">
    document.yourFormName.yourFieldName.focus();
</SCRIPT>


0

เพิ่มสิ่งนี้ที่ด้านบนของ js ของคุณ

var input = $('#myinputbox');

input.focus();

หรือเป็น html

<script>
    var input = $('#myinputbox');

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