Vì tôi thực sự cần giải pháp này và giải pháp cơ bản điển hình ( tập trung đầu vào - sau đó đặt giá trị bằng chính nó ) không hoạt động trên nhiều trình duyệt , tôi đã dành thời gian để chỉnh sửa và chỉnh sửa mọi thứ để nó hoạt động. Dựa trên mã của @ kd7 đây là những gì tôi nghĩ ra.
Thưởng thức! Hoạt động trong IE6 +, Firefox, Chrome, Safari, Opera
Kỹ thuật định vị dấu mũ trên trình duyệt chéo (ví dụ: di chuyển con trỏ đến END)
// ** USEAGE ** (returns a boolean true/false if it worked or not)
// Parameters ( Id_of_element, caretPosition_you_want)
setCaretPosition('IDHERE', 10); // example
Thịt và khoai tây về cơ bản là setCaretPocation của @ kd7 , với sự điều chỉnh lớn nhất if (el.selectionStart || el.selectionStart === 0)
, trong firefox , selectStart bắt đầu từ 0 , trong đó boolean dĩ nhiên đang chuyển sang Sai, vì vậy nó đã bị phá vỡ ở đó.
Trong chrome, vấn đề lớn nhất là chỉ cung cấp cho nó .focus()
là không đủ (nó cứ chọn TẤT CẢ văn bản!) Do đó, chúng tôi đặt giá trị của chính nó, el.value = el.value;
trước khi gọi hàm của chúng tôi, và bây giờ nó đã nắm bắt & vị trí với đầu vào để sử dụng selectStart .
function setCaretPosition(elemId, caretPos) {
var el = document.getElementById(elemId);
el.value = el.value;
// ^ this is used to not only get "focus", but
// to make sure we don't have it everything -selected-
// (it causes an issue in chrome, and having it doesn't hurt any other browser)
if (el !== null) {
if (el.createTextRange) {
var range = el.createTextRange();
range.move('character', caretPos);
range.select();
return true;
}
else {
// (el.selectionStart === 0 added for Firefox bug)
if (el.selectionStart || el.selectionStart === 0) {
el.focus();
el.setSelectionRange(caretPos, caretPos);
return true;
}
else { // fail city, fortunately this never happens (as far as I've tested) :)
el.focus();
return false;
}
}
}
}
if(elem.selectionStart)
nghỉ khi selectStart bằng 0 như được chỉ ra bởi câu trả lời của jhnns.