Оскільки я насправді справді потребував цього рішення, а типове рішення базової лінії ( сфокусуйте вхід - тоді встановіть значення, яке дорівнює собі ) не працює перехресним браузером , я витратив деякий час, переглядаючи та редагуючи все, щоб його працювати. Побудова на @ kd7 ось що я придумав.
Насолоджуйтесь! Працює в IE6 +, Firefox, Chrome, Safari, Opera
Техніка позиціонування карет між переглядачами (наприклад: переміщення курсору до END)
// ** USEAGE ** (returns a boolean true/false if it worked or not)
// Parameters ( Id_of_element, caretPosition_you_want)
setCaretPosition('IDHERE', 10); // example
М'ясо та картопля - це в основному @ kd7 setCaretPosition, з найбільшою настройкою if (el.selectionStart || el.selectionStart === 0)
, у firefox вибірStart починається з 0 , що, звичайно, перетворюється на False, тому він там ламався.
У хромі найбільша проблема полягала в тому, що просто давати її .focus()
недостатньо (вона постійно вибирала ВСІ тексти!) Отже, ми встановлюємо собі значення, el.value = el.value;
перш ніж викликати нашу функцію, і тепер вона має розуміння та позицію вхід для використання 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)
перерви, коли selectionStart дорівнює 0, як також вказували у відповіді jhnns.