Kotak Input Fokus Pada Beban


95

Bagaimana kursor dapat fokus pada kotak masukan tertentu saat pemuatan halaman?

Apakah mungkin untuk mempertahankan nilai teks awal juga dan menempatkan kursor di akhir masukan?

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

Jawaban:


170

Ada dua bagian dari pertanyaan Anda.

1) Bagaimana cara memfokuskan input pada pemuatan halaman?

Anda tinggal menambahkan autofocusatribut ke input.

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

Namun, ini mungkin tidak didukung di semua browser, jadi kita bisa menggunakan javascript.

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

2) Bagaimana cara menempatkan kursor di akhir teks input?

Berikut adalah solusi non-jQuery dengan beberapa kode pinjaman dari jawaban SO lain .

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();
}

Berikut adalah contoh bagaimana saya melakukannya dengan 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
Blok kode pertama yang disarankan sebenarnya menempatkan kursor di akhir nilai yang ada juga, itu berfungsi dengan baik. Saya menghargai bantuan Anda.
Codex73

46

Perlu diketahui - Anda sekarang dapat melakukan ini dengan HTML5 tanpa JavaScript untuk browser yang mendukungnya:

<input type="text" autofocus>

Anda mungkin ingin memulai dengan ini dan membangunnya dengan JavaScript untuk menyediakan cadangan untuk browser lama.


Senang mengetahui bahwa, apakah ini sudah memindahkan kursor ke posisi terakhir di kolom input?
Camilo Díaz Repka

1
Saya tidak berpikir bahwa @ Codex73 mencoba mencapai apa yang dilakukan atribut placeholder di HTML5. Sepertinya dia ingin kursor diposisikan secara otomatis di akhir nilai apa pun yang saat ini ada di input.
jessegavin

2
Anda benar, ini bukanlah solusi lengkap. Tetapi ini menyelesaikan beberapa hal (onload autofocus dan teks placeholder).
David Calhoun

Perhatikan bahwa pada 1/2019, Safari pada iOS tidak mendukung ini: 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

Cara portabel untuk melakukan ini adalah menggunakan fungsi khusus (untuk menangani perbedaan browser) seperti ini .

Kemudian siapkan penangan untuk onloadbagian akhir <body>tag Anda , seperti yang ditulis jessegavin:

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

1

Bekerja dengan baik ...

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

1

solusi satu baris yang sangat sederhana:

<body onLoad="document.getElementById('myinputbox').focus();">

0

Inilah yang bekerja dengan baik untuk saya:

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

fff akan menjadi variabel global yang namanya sama sekali tidak relevan dan tujuannya adalah menghentikan peristiwa onload generik untuk memaksa fokus pada masukan tersebut.

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

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


0

Jika Anda tidak dapat menambahkan ke tag BODY karena alasan tertentu, Anda dapat menambahkan ini SETELAH Formulir:

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

0

Mencoba:

Javascript Murni:

[elem][n].style.visibility='visible';
[elem][n].focus();

Jquery:

[elem].filter(':visible').focus();

0

Tambahkan ini ke atas js Anda

var input = $('#myinputbox');

input.focus();

Atau untuk html

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

    input.focus();
</script>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.