Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
Bom dia, Willian!
Eu preciso que trave mas que informe quantos caracteres ainda faltam para serem digitados!
Olá Gisele
Veja dois exemplos de código que fazem o que você precisa:
Exemplo 1
Exemplo 2
Bom dia, Flávio!
Vou dar uma olhada nesses exemplos! Obrigada!
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...
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!
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...
Que tal usar o atributo html maxlength ?
<textarea maxlength="255"></textarea>se vc apenas quer travar, não há necessidade de js para isso.