Amigos estou com um conflito com o recurso SHIFT+TAB, que retrocede o cursor na navegação da tela. Quando o cursor retrocede para um desses campos que saltam automaticamente, ele volta para o campo posterior, pois o script de “saltar campo” entende que o campo está preenchido e não permite que o cursor lá permaneça; essa função em conjunto com o evento onkeyup acontece este problema. Alguém sabe como resolvo isso?
if (campoAtual.value.length=="")
campoProx.focus();
}
}
Nao daria pra vc detectar quando o usuario preciona shift + tab, e setar alguma flag que vai evitar o cursor de pular de volta pro campo posterior??
Por exemplo, Para pegar o shift+tab no the onkeyup event, vc pode fazer alguma coisa desse tipo:
Ai na funcao que faz o cursos salta pro proximo campo, vc verifica se _mudaCampo eh “true” se for vc salta pro proximo campo, se nao for, vc seta _mudaCampo = true e nao faz nada.
function mudaCampo(campoAtual, tamTotal, campoProx) {
if(_mudaCampo == false) {
_mudaCampo = true; // muda para true porque vc vai querer mudar de campo apos editar.
return;
}
// faz o que tem que fazer na funcao e muda de campo.
}
Eu nao sei a implementacao do seu codigo, mas voce tera que definir essa flag em algum lugar que seja visivel onde ela sera utilizada, de repente ate funciona se vc passar como parametro para a funcao mudaCampo, por exemplo.
[quote=RenatoFigueredo]
porém agora ele não muda o foco quando edita todos os campos para próximo.[/quote]
Ola,
Nao entendi o que voce quis dizer. Que nao esta mudando o foco quando vc quer mudar pro proximo campo??
Debuga com o firebug e verifica se o seu codigo esta chegando ate
Exatamente para retroceder com shift + tab está ok, porém quando completo a edição do campo ele não muda para o próximo campo, tem alguma ideia como faço isso?
facusAnt nao vai existir, provavelmente vc ta tento erro no seu console. muda para focusAnt e veja se resolve o problema.
Outra coisa:
if(facusAnt == false){
facusAnt = true;
return;
}
Talvez algo desse tipo
function mudaCampo(campoAtual, tamTotal, campoProx){
var focusAnt = true;
if (event.shiftKey && event.keyCode == 9) {
focusAnt = false;
}
if(focusAnt == false){
//focusAnt = true; ** vc pode remover essa linha porque vc seta a variavel toda vez que a funcao eh chamada.
return;
}
if (campoAtual.value.length == tamTotal){
campoProx.focus();
}
}
Ainda não funcionou, ele retrocede com shift + tab, porém não passa para o próximo campo; amigo muito obrigado ok, fazemos bem o que fazemos por que gostamos do que fazemos !
Vou ver se consigo pensar em outra solução.
Como eu sou bonzinho eu exemplo que eu fiz usando JQuery. Soh copiar e colar numa pagina e testar.
Nesse exemplo, no event onBlur eu adicionei codigo pra cachear o valor do campo. E no event keyPress verifica se o valor foi alterado, se foi alterado
e o tamanho do valor do campo chegar ao maximo, vai saltar pro proximo, caso contrario continua no mesmo campo.
Entao para testar, voce digita valores ate mudar o foco pro campo 2, pressione shit+tab pra voltar pro campo 1. Altere o campo ate chegar no limite pra fazer mudar o foco pro campo 2.
Sei que voce nao esta usando JQuery, mas da pra servir de inspiracao!
Enjoy!
//Daniel
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(function () {
$("input").bind("keypress", _keyPressHandler);
$("input").blur(function() {
$(this).attr({cachedValue: this.value});
});
});
function _keyPressHandler(event) {
var _isDirty = ($(this).attr("cachedValue") != this.value);
if(this.value.length == $(this).attr("maxlength") && _isDirty) {
// esse pedaco esta hardcoded mas vc pode mudar e pegar o nome do proximo
// campo dinamicamente.
if(this.id == "text1") {
$("#text2").focus();
}
}
else {
return;
}
}
</script>
</head>
<body>
Field 1 : <input type="text" ID="text1" maxlength="10"/><br><br>
Field 2 : <input type="text" ID="text2" maxlength="10"/><br>
<br>
<input type="submit" value="send"/>
</body>
</html>
windsofhell muito obrigado conseguimos, funcionou desta maneira; porém o cursor não fica visível no campo mas selecionado como campo atual onde o usário continua digitando.
function mudaCampo(campoAtual,tamTotal,campoProx){
if (event.shiftKey == true && event.keyCode == 9){
campoAtual.value ="";//Pula para o campo e apaga
}
if(campoAtual.value.length == tamTotal){
campoProx.focus();
}
}
[quote=RenatoFigueredo]Amigos estou com um conflito com o recurso SHIFT+TAB, que retrocede o cursor na navegação da tela. Quando o cursor retrocede para um desses campos que saltam automaticamente, ele volta para o campo posterior, pois o script de “saltar campo” entende que o campo está preenchido e não permite que o cursor lá permaneça; essa função em conjunto com o evento onkeyup acontece este problema. Alguém sabe como resolvo isso?
if (campoAtual.value.length=="")
campoProx.focus();
}
}