Ir para conteúdo

Arquivado

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

Gisele.Passoni

TextArea - Limitador de caracteres com erro

Recommended Posts

Bom dia a todos!
Meu problema é o seguinte: Em um sistema que fiz para os docentes da nossa instituição, tem um textarea onde eles digitam o plano de aula. Ele possui um limitador de caracteres e é exibido o total de caracteres restantes abaixo desse textarea. O professor digita e grava. Caso ele precise alterar algo, o que foi digitado é retornado dentro desse textarea e ele automaticamente exibe a quantidade de caracteres restantes. Até aí, tudo bem! Mas ao clicar dentro do textarea e começar a digitar algo, aparece a informação de que restam mais caracteres a serem digitados do que o real.

Ex: Foram digitados 3969 e restam 1 caractere a ser digitado. Ao clicar dentro dele, no lugar onde aparecia esse “1”, aparece “90”. Aí o programa deixa digitar esses noventas até travar a digitação, mas ao gravar dá erro, pois ultrapassou o limite.

O que devo fazer para corrigir esse erro de aparecer mais caracteres do que o real a ser digitado?

Segue os códigos necessários:

 

Função:

$(function(){
	$(".maxlength_ementas").keyup(function(event){
		var target	= $("#ccementas");
		var max		= target.attr('title');
		var len 	= $(this).val().length;
		var remain	= max - len;
		if(len > max)
		{
			var val = $(this).val();
			$(this).val(val.substr(0, max));
			remain = 0;
		}
		target.html(remain);		
	});

No select faço:

$sql="select DBMS_LOB.GETLENGTH(ementa) AS LEN_EMENTA,....."

 

Depois:

$cons = ociparse($ora_conn,$sql);
.....
$total_ementa=oci_result($cons,"LEN_EMENTA");
$res_ementa=3970-$total_ementa;

No formulário:

<textarea name="objetivos" id="objetivos" cols="120" rows="10" <?php echo $read;?> class="maxlength_ementas"><?php echo $ementa; ?></textarea>
             <p align="right">Caracteres restantes: <span class="estilo09"><span id=" ccementas " title="3970"> <?php if ($res_ementa<0) {echo '0';}
   	              else echo $res_ ementa; ?></span></span></p>

Se alguém puder me ajudar, agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tal usar o atributo html maxlength ?

 

<textarea maxlength="255"></textarea>
se vc apenas quer travar, não há necessidade de js para isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia!!

Flavio, não deu certo....

Do jeito que eu fiz, retorna do banco por exemplo 1441 restantes... mas quando clico dentro do textarea e começo a digitar, aparecem 1450 restantes... mais do que o real e com isso se eu digitar os 1450 restantes dá erro ao gravar, pois o máximo seria os 1441 (valor retornado pela variável $res_ementa).

Se eu digitar sem usar o "Enter", dá certo. Mas se for com enter, então começa a dar diferença...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que andei pesquisando, parece que o problema está na linha do Jquery

var len = $(this).val().length;

Que não conta os "enter"

 

Caso alguém saiba como resolver isso, por favor, poste aqui!

Grata!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde a todos!

Tive que quebrar a cabeça sozinha mesmo...

A solução que encontrei foi não mexer no JQuery (onde eu achei que estava o problema) e sim alterar essa linha de código php antes de contar os caracteres restantes...

$ementa=oci_result($cons,"LEN_EMENTA");
$teste = str_replace("\r\n"," ",$ementa); // linha que acrescentei...
$total_caract_ementa=strlen($teste); // linha que acrescentei...
$resta=3970-$total_caract_ementa;

Com isso, ao invés de contar \r\n como sendo 2 caracteres, ele conta apenas um, o espaço em branco...

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.