Extraído da Configuração da posição do cursor do teclado de Josh Stodola em uma caixa de texto ou área de texto com Javascript
Uma função genérica que permitirá inserir o cursor em qualquer posição de uma caixa de texto ou área de texto que você desejar:
function setCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
O primeiro parâmetro esperado é o ID do elemento no qual você deseja inserir o cursor do teclado. Se o elemento não puder ser encontrado, nada acontecerá (obviamente). O segundo parâmetro é o índice de posição do sinal de intercalação. Zero colocará o cursor do teclado no início. Se você passar um número maior que o número de caracteres no valor dos elementos, ele colocará o cursor do teclado no final.
Testado no IE6 e superior, Firefox 2, Opera 8, Netscape 9, SeaMonkey e Safari. Infelizmente, no Safari, ele não funciona em combinação com o evento onfocus).
Um exemplo de uso da função acima para forçar o cursor do teclado a pular para o final de todas as áreas de texto na página quando receberem o foco:
function addLoadEvent(func) {
if(typeof window.onload != 'function') {
window.onload = func;
}
else {
if(func) {
var oldLoad = window.onload;
window.onload = function() {
if(oldLoad)
oldLoad();
func();
}
}
}
}
// The setCaretPosition function belongs right here!
function setTextAreasOnFocus() {
/***
* This function will force the keyboard caret to be positioned
* at the end of all textareas when they receive focus.
*/
var textAreas = document.getElementsByTagName('textarea');
for(var i = 0; i < textAreas.length; i++) {
textAreas[i].onfocus = function() {
setCaretPosition(this.id, this.value.length);
}
}
textAreas = null;
}
addLoadEvent(setTextAreasOnFocus);
if(elem.selectionStart)
quebra quando selectionStart é 0, como também indicado pela resposta de jhnns.elem.value = elem.value.replace(/^9/g,'+79')
no código. No cursor OperaMINI depois+
. esta função não ajudaO link na resposta está quebrado, este deve funcionar (todos os créditos vão para blog.vishalon.net ):
http://snipplr.com/view/5144/getset-cursor-in-html-textarea/
Caso o código se perca novamente, aqui estão as duas funções principais:
fonte
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)
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 mesmoel.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 .fonte
.onclick
, em vez de.onfocus
dentro de sua função search_field_focusel.value = el.value; [...] if(el !== null)
- Eu trocaria essas duas linhas. Seel
for nulo,el.value = el.value
falhará, de modo que a linha deve estar dentro doif
.Eu ajustei a resposta do kd7 um pouco, porque elem.selectionStart será avaliado como falso quando o selectionStart for 0.
fonte
Encontrei uma maneira fácil de corrigir esse problema, testado no IE e no Chrome:
Passe o ID da caixa de texto e a posição do cursor para esta função.
fonte
Se você precisa focar em alguma caixa de texto e seu único problema é que todo o texto fica realçado, enquanto você deseja que o cursor esteja no final, nesse caso específico, você pode usar este truque para definir o valor da caixa de texto para si mesmo após o foco:
fonte
fonte
fonte
tID
deve ser o ID do elemento, não o objeto do elemento em si. Se você estiver passando o objeto de elemento, basta remover as 2 primeiras linhas deste método e ele funcionará.Eu fixaria as condições como abaixo:
fonte