Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rcvanni

posição do cursor dentro de um campo text

Recommended Posts

Pessoal, uma luz por favor ...Existe alguma função que descubra a posição do cursor dentro de um campo text em um form ?Obs.: Vou usar no IE e FF ...Grato desde já...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu estou tentando criar um form que seja mais ou menos assim :

 

function limpaA() {if(document.getElementById('myForm').value!="") {document.getElementById('myForm').elements[0].value="";}}function limpaB() {if(document.getElementById('myForm').value!="") {document.getElementById('myForm').elements[1].value="";}}function limpaC() {if(document.getElementById('myForm').value!="") {document.getElementById('myForm').elements[2].value="";}}function checkLen(x,y){if (y.length==x.maxLength)		{		var next=x.tabIndex		if (next<document.getElementById("myForm").length)				{				document.getElementById("myForm").elements[next].focus()				}		}}</script></head><body><p>This script automatically jumps to the next field when a field's maxlength has been reached:</p><form id="myForm"><input size="2" tabindex="1" maxlength="2" onFocus="limpaA()" onkeyup="checkLen(this,this.value)" value="30"><input size="2" tabindex="2" maxlength="2" onFocus="limpaB()" onkeyup="checkLen(this,this.value)" value="11"><input size="2" tabindex="3" maxlength="2" onFocus="limpaC()" onkeyup="checkLen(this,this.value)" value="06"></form></body></html>

Veja que ele já vem preenchido com os valores. O que preciso é que o usuário consiga digitar em cima do que já está no campo ( efeito semelhante a quando pressionamos a tecla "Insert" do teclado...) e quando atingir as duas posições ele pule ao próximo campo ....

 

o código acima está "quase" fazendo isto, exceto pelo fato de que ele limpa o campo antes . Coisa que o usuário não quer ...

 

Grato desde já ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

ué você tá pedindo p/ ele limpar, veja:

function limpaA() {if(document.getElementById('myForm').value!="") {document.getElementById('myForm').elements[0].value=""; //AKI}}function limpaB() {if(document.getElementById('myForm').value!="") {document.getElementById('myForm').elements[1].value=""; //AKI}}function limpaC() {if(document.getElementById('myForm').value!="") {document.getElementById('myForm').elements[2].value=""; //AKI}}

tá vendo é só comentar, ai você vai ver q não vai apagar, ok?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim...

 

mas se eu não limpo antes ...

 

e não tiver pressionado a tecla "Insert" antes, ele não me deixa preencher o campo ... pois já atingiu o tamanho max ... ( ou seja pula para o prox sem que eu consiga inserir o valor...)

 

se eu tiro o maxlength="2" e acerto o código assim ....

 

function checkLen(x,y){if (y.length==2)		{		var next=x.tabIndex		if (next<document.getElementById("myForm").length)				{				document.getElementById("myForm").elements[next].focus()				}		}}</script></head><body><p>This script automatically jumps to the next field when a field's maxlength has been reached:</p><form id="myForm"><input size="2" tabindex="1" onkeyup="checkLen(this,this.value)" value="30"><input size="2" tabindex="2" onkeyup="checkLen(this,this.value)" value="11"><input size="2" tabindex="3" onkeyup="checkLen(this,this.value)" value="06"></form></body>

está acontecendo 02 coisas :

 

1- se eu não pressiono o insert do teclado antes ....

 

ele vai rebater o conteudo que já está no campo para a direita ... e ...não vai passar por cima como o usuário quer...

 

2- se eu pressiono o insert do teclado antes ...

 

sim ele vai passar por cima do conteúdo mas estah apenas atualizando a primeira posição do campo e já passando para o prox...( obviamente porque atingiu o tam 02... )

 

Como acertar isto ?

 

Veja, parece uma bobeira ( ou até é mesmo e estou comendo bola ...) mas precisava mesmo de uma força nisto...

 

Valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não estou t entendendo, veja, você tem uma função q está lá SÓ P/ LIMPAR OS CAMPOS, e depois você me diz q qr q não LIMPE!O Q você QR?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tem nada a haver com a limpeza dos campos

 

a limpeza dos campos foi apenas uma solução que tentei ( e que o usuário não aceitou ... ) e a usei apenas para exemplificar...

 

o que o usuário quer mesmo ( e eu tb ... ) é o que está escrito em meu post anterior ... digitar a data em cima de uma informação pré-existente no form e ser automaticamente levado ao próx. campo ...

 

 

 

Veja, por favor, um exemplo em ....

 

Teste

 

Ele deveria possibilitar a alteração do dia e pular automaticamente ao campo do mes e em seguida do ano ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função é essa:

function doGetCaretPosition (ctrl) {	var CaretPos = 0;	if (document.selection) { //IE		ctrl.focus ();		var Sel = document.selection.createRange ();		Sel.moveStart ('character', -ctrl.value.length);		CaretPos = Sel.text.length;	}	else if (ctrl.selectionStart || ctrl.selectionStart == '0'){ // Firefox		CaretPos = ctrl.selectionStart;	}	return (CaretPos);}
Para chamalá:
doGetCaretPosition(document.NomeDoForm.NomeDoTextbox)
Flw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu, Marhault. Obrigado !

 

Veja como ficou o código ...

 

function doGetCaretPosition (ctrl) {	var CaretPos = 0;	if (document.selection) { //IE		ctrl.focus ();		var Sel = document.selection.createRange ();		Sel.moveStart ('character', -ctrl.value.length);		CaretPos = Sel.text.length;	}	else if (ctrl.selectionStart || ctrl.selectionStart == '0'){ // Firefox		CaretPos = ctrl.selectionStart;	}	//alert(CaretPos);	return (CaretPos);}function checkLen(x,y){if (y.length==x.maxLength)	 {	 dom = doGetCaretPosition(x);	 //alert(dom);	 if (dom==2) {		var next=x.tabIndex		if (next<document.getElementById("myForm").length)				{				document.getElementById("myForm").elements[next].focus()				}		}	  }}</script></head><body><p>This script automatically jumps to the next field when a field's maxlength has been reached:</p><form id="myForm"><input size="2" tabindex="1" maxlength="2" onkeyup="checkLen(this,this.value)" value="30"><input size="2" tabindex="2" maxlength="2" onkeyup="checkLen(this,this.value)" value="11"><input size="2" tabindex="3" maxlength="2" onkeyup="checkLen(this,this.value)" value="06"></form></body></html>

O galho eh que para funcionar o usuário ainda tem que apertar a tecla insert antes ... Tem como contornar isto ? Tem como no javascript eu deixar habilitado a tecla insert por default quando rodar esta função ?

 

Veja por favor funcionando em Teste

 

 

Valeu !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, achei esta função em vários foruns pela internet a fora, e encontrei tambem um bug nela, ou uma caracteristica, como desejarem... Para o IE ela sempre retorna a posição do FIM da seleção e para o FireFox sempre o inicio, o que gera uma discrepância entre os resultados nos dois browsers.

 

Fiz uma pequena correção que consistem em salvar o tamanho inicial da seleção e subtrai-lo do tamanho final depois de movido o cursor para o inicio e estou distribuindo:

 

function doGetCaretPosition (ctrl) {
	var CaretPos = 0;
	// IE Support
	if (document.selection) {

		ctrl.focus ();
		var Sel = document.selection.createRange();
		var SelLength = document.selection.createRange().text.length;
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length - SelLength;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		CaretPos = ctrl.selectionStart;

	return (CaretPos);

}

A função é essa:

function doGetCaretPosition (ctrl) {
	var CaretPos = 0;
	if (document.selection) { //IE
		ctrl.focus ();
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length;
	}
	else if (ctrl.selectionStart || ctrl.selectionStart == '0'){ // Firefox
		CaretPos = ctrl.selectionStart;
	}
	return (CaretPos);
}
Para chamalá:
doGetCaretPosition(document.NomeDoForm.NomeDoTextbox)
Flw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.