Esta pergunta foi feita em alguns formatos diferentes, mas não consigo fazer com que nenhuma das respostas funcione em meu cenário.
Estou usando o jQuery para implementar o histórico de comandos quando o usuário pressiona as setas para cima / para baixo. Quando a seta para cima é pressionada, substituo o valor de entrada pelo comando anterior e defino o foco no campo de entrada, mas quero que o cursor sempre seja posicionado no final da string de entrada.
Meu código, como é:
$(document).keydown(function(e) {
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
var input = self.shell.find('input.current:last');
switch(key) {
case 38: // up
lastQuery = self.queries[self.historyCounter-1];
self.historyCounter--;
input.val(lastQuery).focus();
// and it continues on from there
Como posso forçar o cursor a ser colocado no final da 'entrada' após o foco?
javascript
jquery
focus
cursor
Jerodsanto
fonte
fonte
var temp = input.focus().val(); input.val('').val(temp);
input.focus().val(input.val());
contenteditable
elementos por algum motivo, talvez porque seja necessário usar em.html()
vez de.val()
Parece um pouco estranho, até bobo, mas isso está funcionando para mim:
Agora, não tenho certeza se repliquei sua configuração. Estou assumindo que
input
é um<input>
elemento.Ao reconfigurar o valor (para ele mesmo), acho que o cursor está sendo colocado no final da entrada. Testado no Firefox 3 e MSIE7.
fonte
Espero que isso ajude você:
fonte
Chris Coyier tem um mini plugin jQuery para isso que funciona perfeitamente bem: http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/
Ele usa setSelectionRange se houver suporte, caso contrário, tem um fallback sólido.
Então você pode apenas fazer:
fonte
Que tal em uma única linha ...
Esta linha funciona para mim.
fonte
2 resposta do artlung : Funciona com a segunda linha apenas no meu código (IE7, IE8; Jquery v1.6):
Adição: se o elemento de entrada foi adicionado ao DOM usando JQuery, um foco não é definido no IE. Eu usei um pequeno truque:
fonte
Ref: @ will824 Comentário, Esta solução funcionou para mim sem problemas de compatibilidade. O resto das soluções falhou no IE9.
Testado e encontrado funcionando em:
fonte
Eu sei que essa resposta chega tarde, mas posso ver que as pessoas não encontraram uma resposta. Para evitar que a tecla up coloque o cursor no início, apenas a
return false
partir do método que trata do evento. Isso interrompe a cadeia de eventos que leva ao movimento do cursor. Colando o código revisado do OP abaixo:fonte
var key = e.charCode || e.keyCode || 0;
Eu uso o código abaixo e funciona bem
fonte
Será diferente para navegadores diferentes:
Isso funciona em ff:
Mais detalhes estão nestes artigos aqui em SitePoint , AspAlliance .
fonte
como outro dito, limpar e preencher funcionou para mim:
fonte
defina o valor primeiro. em seguida, defina o foco. quando focar, ele usará o valor que existe no momento do foco, portanto, seu valor deve ser definido primeiro.
essa lógica funciona para mim com um aplicativo que preenche um
<input>
com o valor de um clicado<button>
.val()
é definido primeiro. entãofocus()
fonte
$('input[name=item1]').val(value).focus();
Eu encontrei a mesma coisa sugerida acima por algumas pessoas. Se você
focus()
primeiro, em seguida, colocar oval()
na entrada, o cursor será posicionado no final do valor de entrada no Firefox, Chrome e IE. Se você colocar oval()
no campo de entrada primeiro, o Firefox e o Chrome posicionarão o cursor no final, mas o IE o posicionará para frente quando vocêfocus()
.deve fazer o truque (sempre fez para mim de qualquer maneira).
fonte
No primeiro, você deve definir o foco no objeto de caixa de texto selecionado e, em seguida, definir o valor.
fonte
funciona para todos os navegadores, por exemplo.
fonte
Aqui está outro, um liner que não reatribui o valor:
fonte
fonte
A resposta do scorpion9 funciona. Só para deixar mais claro, veja meu código abaixo,
fonte
Vai focar com o ponto do mouse
$ ("# TextBox"). Focus ();
fonte