Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: textarea limit - problem
Forum PHP.pl > Forum > PHP
tasiej
Witam, mam problem z limitem w textarea tzn mogę ustawić z admina limit ale bez problemu da się go ominąć np. wklejają tekst z dużo większą ilością znaków (przy normalnym pisaniu blokuje się, natomiast przy wklejaniu nie) o to kod:

<!-- Start Template {contentPath}/{contentTpl} -->
<!-- #BeginEditable "Body" -->

<form name="form1" method="post" action="">
<br />
<table width="{contentWidth}" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td class="boxTitle">
<table width="100%" border="0" cellpadding="5" cellspacing="0">
<tr>
<td class="row1" style="padding-top:10px; padding-left:10px"><strong>{T_TO}:</strong></td>
<td class="row1" style="padding-top:10px"><?=$tpl['sendto']?></td>
</tr>
<tr>
<td class="row1" style="padding-left:10px"><strong>{T_SUBJECT}:</strong></td>
<td class="row1"><div class="font_error"><?=$tpl['a_errInput']['subject']?></div>
<input name="subject" value="<?=$tpl['fo']['subject']?>" class="tf" style="width: 450px; font-size:13px"> </td>
</tr>
<tr>
<td valign="top" class="row1" style="padding-left:10px"><strong>{T_MSG_BODY}:</strong></td>
<td class="row1"><div class="font_error"><?=$tpl['a_errInput']['mesg']?></div>
<?php $chars = ($tpl['mesgMaxChar']) ? $tpl['mesgMaxChar'] : 500; ?>
<textarea name="mesg" id="mesg" rows="13" class="ta" style="width: 450px; font-size:13px"
onkeydown="checkFieldLength('mesg', 'charcount', 'remaining', <?=$chars?>);"><?=$tpl['fo']['mesg']?>


</textarea>



<div class="text_normal" style="margin:2px;">
<span id="charcount" style="padding:1px">0</span> {T_CHARACTERS_ENTERED} |
<span id="remaining" style="padding:1px"><?=$chars?></span> {T_CHARACTERS_REMAINING}</div> </td>
</tr>
<tr>
<td colspan="2" align="center" class="row1" style="padding-bottom:10px">
<input type="hidden" name="task">
<input type="hidden" name="id" value="<?=$tpl['sendtoID']?>">
<input name="button" type="button" value="{T_SEND}" class="button" onClick="check_form('add')"
style="width:75px; background-image: url('<?=$tpl['tplPath']?>/images/button-normal.gif')">&nbsp; </td>
</tr>
</table>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
</form>

<!-- #EndEditable -->
<!-- End Template {contentPath}/{contentTpl} -->
  1. [/html][html]
  1. [/html]<!--Geshi:226224:php--><pre class="php-brief" style="font-family:monospace;"><div class="head">[PHP] <a href='./Pobierz-Plik-226224.html' target='_blank'>pobierz</a>, <a href='Plaintext-226224.html' target='_blank'>plaintext</a> </div><ol><li class="li1"><div class="de1"><span class="br0">[</span><span class="sy0">/</span>php<span class="br0">]</span><span class="br0">[</span>php<span class="br0">]</span></div></li></ol><div class="foot">[PHP] <a href='./Pobierz-Plik-226224.html' target='_blank'>pobierz</a>, <a href='Plaintext-226224.html' target='_blank'>plaintext</a> </div></pre><!--/Geshi:226224:php-->[html]
[xml][/xml][php][/php]






Co należy zmienić aby na stałe już zrobić limit bez konieczności sterowania nim z panelu admina?

Dziękuję za pomoc
Asmox
Spróbuj tak, póki nikt inny nie napisze, nie jestem ekspertem w JS, ale wydaje mi się że styknie
przy Textarea dajesz atrybut onChange="controlMe()"
Kod
limit = 150; // limit znaków
textAreaValue = self.value; // Obiekt który wykonuje funkcję, sam się wstawia
if(textAreaValue.length > limit) {
textAreaValue.substring(0, limit);
}
self.value = textAreaValue

Ten przykład pewnie łatwiej zrozumieć, ale jak wszystko będzie działało to nawet nie trzeba robić tego textAreaValue tylko od razu self.value
tasiej
Niestety nic nie pomogło, być może coś źle zrobiłem? nic nie usuwałem po prostu dodałem ten kod i niestety żadnych rezultatów. Kod dodałem w sekcji textarea.
marcint83
Spróbuj zamiast onkeydown dać onkeyup a jeśli to nie pomoze to jeszcze przed wyslaniem formularza w zdarzeniu przycisku submit daj wycinanie znakow.
piotr94
a nie można sprawdzać po stronie php?
daj tą samą funkcję do zdarzeń:
onfocus i onblur (wtedy przy wejściu do pola i przy jego opuszczeniu zostanie sprawdzona jego wartość
lub daj w js sprawdzanie cykliczne np. co 0.5 s lub przy ruszeniu myszką o jakąś odległość
tasiej
Czyli jak powinien wyglądać konkretnie kod? jestem trochę zielony w takich sprawach. Co powinno znajdować się w sekcji textarea? a może problem tkwi w innym miejscu?

Dziękuje za odpowiedzi
krispak
Radzilbym sprawdzac to po stronie php.
Jezeli liczba znakow przekroczona wyrzucac z powrotem do formularza z informacja o przekroczony limicie znakow.
Wystarczy ze wylacze js w przegladarce i twoj skrypt juz nie zadziala wiec wkleje sobie ile chce.
Pozdrawiam
piotr94
cóż, ja stosuję czasem kontrolę js tylko jako sprawdzenie wstępne, i tak wszystko musisz sprawdzać w php, bo inaczej będziesz mieć śmieci w bazie...
tasiej
Panowie może trochę jaśniej? jakie zmiany są potrzebne w tym kodzie?
marcint83
A próbowałeś tak:
  1. <textarea name="mesg" id="mesg" rows="13" class="ta" style="width: 450px; font-size:13px"
  2. onblur="checkFieldLength('mesg', 'charcount', 'remaining', <?=$chars?>);" onkeyup="checkFieldLength('mesg', 'charcount', 'remaining', <?=$chars?>);"><?=$tpl['fo']['mesg']?>
  3.  
  4.  

questionmark.gif?

Tak jak mówią koledzy, zrób też dodatkowe ograniczenie w PHP.
tasiej
Witam ponownie szanownych forumowiczów:)

Powiem krótko: udało się, dodałem onBlour ale dodatkowo dodałem również zdarzenia: onMouseMove , onSubmit ( o czym już kolega wcześniej wspominał).


Dziękuje za pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.