Kể từ khi tôi thực sự thực sự cần thiết này giải pháp 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 trình duyệt chéo, tôi đã dành thời gian chỉnh sửa và chỉnh sửa everythin g để làm cho nó hoạt động. Xây dựng theo mã số @kd7 đây là những gì tôi đã đưa ra.
Tận hưởng!Hoạt động trong IE6 +, Firefox, Chrome, Safari, Opera
Cross-browser caret positioning technique (example: moving the cursor to the 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 là về cơ bản @kd7 's setCaretPosition, với tinh chỉnh lớn nhất là if (el.selectionStart || el.selectionStart === 0)
, trong firefox các selectionStart là bắt đầu tại , mà trong boolean tất nhiên là chuyển sang False, do đó, nó đã được phá vỡ ở đó.
Trong chrome vấn đề lớn nhất là chỉ cần cho nó .focus()
là không đủ (nó tiếp tục chọn TẤT CẢ các văn bản!) Do đó, chúng tôi thiết lập giá trị của chính nó, cho chính nó el.value = el.value;
trước khi gọi chức năng của chúng tôi, và bây giờ nó có nắm bắt vị trí & với đầu vào để sử dụng selectionStart.
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;
}
}
}
}
Nguồn
2012-09-20 18:32:14
Đây không phải là một bản sao, một yêu cầu jQuery khác không – Isaac
@Isaac tôi đã bỏ phiếu để mở lại này. Hãy nhớ rằng SO có rất nhiều mod nhỏ, những người làm ** không ** quan tâm đến bất cứ điều gì khác hơn là chỉnh sửa mù quáng cho mục đích tự sát. – John