Làm cách nào để đặt con trỏ vào hộp nhập liệu trong Javascript?


80
document.getElementById(frmObj.id).value="";
document.getElementById(frmObj.id).autofocus;
document.getElementById("errorMsg").innerHTML = "Only numeric value is allowed";

Trong đoạn mã trên, giá trị của đối tượng biểu mẫu được thiết lập hoàn hảo ""nhưng không có con trỏ trong hộp văn bản. Tôi muốn một con trỏ ở đó. focus()chỉ tập trung vào hộp nhập đó nhưng không thực sự đặt con trỏ.


1
document.getElementById(fieldID).focus();nên đặt con trỏ nhấp nháy trong trường biểu mẫu trừ khi bạn có thứ gì khác lấy tiêu điểm trên trang. Báo cáo kết quả với .autofocus bạn có bây giờ không có gì
mplungjan

1
.focus()đặt con trỏ. Đây là toàn bộ ý nghĩa của hành động lấy nét.
Shadow Wizard đang tiêm chủng vào

1
nếu tập trung không làm việc, tôi sẽ cố gắng nhấp chuột ()
Oriesok Vlassky

2
Người đọc trong tương lai: cũng đảm bảo rằng phần tử bạn đang nhắm mục tiêu đã được thêm vào DOM. Tôi đang tạo các phần tử trong script và gọi focus () vào chúng trước khi nối chúng. Chuyển đổi thứ tự đã khắc phục sự cố cho tôi.
Matthew R.

Câu trả lời:


107

Trong JavaScript, đầu tiên hãy tập trung vào điều khiển và sau đó chọn điều khiển để hiển thị con trỏ trên texbox ...

document.getElementById(frmObj.id).focus();
document.getElementById(frmObj.id).select();

hoặc bằng cách sử dụng jQuery

$("#textboxID").focus();

12
Không cần lựa chọn. Có điều gì đó khác đang xảy ra với mã của anh ấy. Có thể là một PDF nhúng hoặc tương tự
mplungjan

1
tôi muốn con trỏ đó phải ở đó trong hộp văn bản. tôi không nên nhấp vào hộp văn bản để nhập giá trị.
yukti kamra

Trên thực tế, trong trường hợp của tôi, lựa chọn đã làm cho mã KHÔNG hoạt động. Bạn chỉ muốn tiêu điểm ();
Greg Blass,

56

Tôi nhận ra rằng đây là một câu hỏi khá và cũ, nhưng tôi có một giải pháp 'ngu ngốc' cho một vấn đề tương tự mà có thể có thể giúp ai đó.

Tôi đã gặp sự cố tương tự với hộp văn bản được hiển thị như đã chọn (theo phương pháp Focus trong JQuery), nhưng không đưa con trỏ vào.

Thực tế là tôi đã mở cửa sổ Trình gỡ lỗi để xem điều gì đang xảy ra và cửa sổ ĐÓ đang lấy cắp tiêu điểm. Giải pháp rất đơn giản: chỉ cần đóng Trình gỡ lỗi và mọi thứ đều ổn ... 1 giờ để thử nghiệm!


Tôi đã cố gắng làm cho một <span>phần tử có thể tập trung được và điều này đã trở thành vấn đề (rất vui vì tôi đã cuộn qua câu trả lời được chấp nhận đầu tiên). Tôi cũng nhận thấy rằng có các phần tử html không thể lấy tiêu điểm theo mặc định (dường như dành riêng cho trình duyệt). Phần <span>tử là một trong những phần tử đó là lý do tại sao Chrome (Phiên bản 57) tập trung vào cửa sổ công cụ dành cho nhà phát triển.
larrylampco

Bình luận này đã giúp tôi tiết kiệm vài phút hơn là hàng giờ!
dùng1503941

7

Đôi khi bạn nhận được tiêu điểm nhưng không có con trỏ trong trường văn bản. Trong trường hợp này, bạn sẽ làm điều này:

document.getElementById(frmObj.id).select();

Vâng, điều này là đúng đôi khi có một .focus chuyển tiếp () sẽ không làm việc, bạn sẽ phải sử dụng $ ( "yếu tố") [0] .Chọn () để có được con trỏ
imal hasaranga Perera

1
hoặc el.setSelectionRange (el.value.length, el.value.length); để lấy con trỏ ở cuối dòng.
Vector

Lưu ý: setSelectionRangesẽ KHÔNG hoạt động<input type="number"/>
Vandesh

2

Một trong những điều có thể khiến bạn khó chịu là nếu bạn đang sử dụng .onmousedownlàm tương tác người dùng của mình; khi bạn làm điều đó, và sau đó nỗ lực ngay lập tức được thực hiện để chọn một trường, điều đó sẽ không xảy ra, vì con chuột đang bị giữ trên một thứ khác . Vì vậy, thay đổi thành .onmouseupvà viola, bây giờ focus()hoạt động, vì chuột ở trạng thái không được nhấp khi nỗ lực thay đổi tiêu điểm được thực hiện.


1

Bạn chưa cung cấp đủ mã để giúp Bạn có thể gửi biểu mẫu và tải lại trang HOẶC bạn có một đối tượng trên trang như một tệp PDF được nhúng đánh cắp tiêu điểm.

Đây là phương pháp javascript đơn giản chuẩn để xác thực biểu mẫu Nó có thể được cải thiện với JS không phô trương sẽ loại bỏ tập lệnh nội tuyến, nhưng đây là điểm khởi đầu DEMO

function validate(formObj) {
  document.getElementById("errorMsg").innerHTML = "";    
  var quantity = formObj.quantity;
  if (isNaN(quantity)) {
    quantity.value="";
    quantity.focus();
    document.getElementById("errorMsg").innerHTML = "Only numeric value is allowed";
    return false;
  }
  return true; // allow submit
}   

Đây là HTML

<form onsubmit="return validate(this)">
    <input type="text" name="quantity" value="" />
    <input type="submit" />
</form>    
<span id="errorMsg"></span>

1

Cách này đặt tiêu điểm và con trỏ ở cuối đầu vào của bạn:

div.getElementsByTagName("input")[0].focus();
div.getElementsByTagName("input")[0].setSelectionRange(div.getElementsByTagName("input")[0].value.length,div.getElementsByTagName("input")[0].value.length,"forward");

0

Theo kinh nghiệm của tôi

document.getElementById (frmObj.id) .focus ();

tốt trên trình duyệt chạy trên PC. Nhưng trên thiết bị di động, nếu bạn muốn bàn phím hiển thị để người dùng có thể nhập liệu trực tiếp thì bạn cũng cần:

document.getElementById (frmObj.id) .select ();


0

Bên trong thẻ đầu vào, bạn có thể thêm autoFocus = {true} cho bất kỳ ai sử dụng jsx / react.

<input
 type="email"
 name="email"
 onChange={e => setEmail(e.target.value)}
 value={email}
 placeholder={"Email..."}
 autoFocus={true}
/>
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.