เนื่องจากฉันต้องการโซลูชันนี้จริง ๆ และโซลูชันพื้นฐานทั่วไป ( โฟกัสอินพุต - จากนั้นตั้งค่าเท่ากับตัวเอง ) ไม่ทำงานข้ามเบราว์เซอร์ฉันใช้เวลาปรับแต่งและแก้ไขทุกอย่างเพื่อให้ทำงานได้ การสร้างโค้ดของ @ kd7นี่คือสิ่งที่ฉันคิดไว้
สนุก! ทำงานได้ใน IE6 +, Firefox, Chrome, Safari, Opera
เทคนิคการวางตำแหน่งคาเร็ตข้ามเบราว์เซอร์ (ตัวอย่าง: เลื่อนเคอร์เซอร์ไปที่ปลาย)
// ** USEAGE ** (returns a boolean true/false if it worked or not)
// Parameters ( Id_of_element, caretPosition_you_want)
setCaretPosition('IDHERE', 10); // example
เนื้อสัตว์และมันฝรั่งนั้นเป็นsetCaretPosition โดย @ kd7โดยมีการบิดที่ใหญ่ที่สุดif (el.selectionStart || el.selectionStart === 0)
ใน firefox selectionStart เริ่มต้นที่0ซึ่งแน่นอนว่าบูลีนจะเปลี่ยนเป็นเท็จดังนั้นมันจึงหยุดอยู่ตรงนั้น
ในโครมปัญหาที่ใหญ่ที่สุดคือการให้มัน.focus()
ไม่เพียงพอ (มันเลือกข้อความทั้งหมด!) ดังนั้นเราจึงกำหนดค่าของตัวเองให้กับตัวเองel.value = el.value;
ก่อนที่จะเรียกฟังก์ชั่นของเราและตอนนี้มันมีความเข้าใจ & ตำแหน่งด้วย ป้อนข้อมูลเพื่อใช้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;
}
}
}
}
if(elem.selectionStart)
หยุดพักเมื่อ selectionStart เป็น 0 ตามที่ชี้โดยคำตอบของ jhnns