Como eu realmente precisava dessa solução, e a solução típica da linha de base ( concentre a entrada - depois defina o valor igual a si mesma ) não funciona em vários navegadores , passei algum tempo aprimorando e editando tudo para fazê-la funcionar. Com base no código do @ kd7 , aqui está o que eu criei .
Aproveitar! Funciona no IE6 +, Firefox, Chrome, Safari, Opera
Técnica de posicionamento de cursor de cursor entre navegadores (exemplo: movendo o cursor para END)
// ** USEAGE ** (returns a boolean true/false if it worked or not)
// Parameters ( Id_of_element, caretPosition_you_want)
setCaretPosition('IDHERE', 10); // example
A carne e as batatas são basicamente o setCaretPosition do @ kd7 , com o maior ajuste if (el.selectionStart || el.selectionStart === 0)
, no firefox o selectionStart está começando em 0 , o que, em booleano, é claro, está se voltando para False, então estava chegando lá.
No chrome, o maior problema era que apenas fornecê-lo .focus()
não era suficiente (continuava selecionando TODO o texto!) Portanto, definimos o valor de si mesmo el.value = el.value;
antes de chamar nossa função, e agora ele tem uma compreensão e posição com o parâmetro entrada para usar 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)
quebra quando selectionStart é 0, como também indicado pela resposta de jhnns.