Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] policzenie przejść do następnej linii w textarea (enterów)
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
KCG
Chodzi mi policzenie '\n' (przynajmniej w php tak jest zaznaczane przejście do następnej linii), aby użytkownik w textarea mógł np. wpisać tylko 7 linii.
W php było by coś w stylu:
  1. <?php
  2. $br = explode('\n',$tekst);
  3. $ile = count($br);
  4. ?>

Jednak wolałbym zrobić to w js smile.gif

pzdr
Jarod
A nie mógłbyś odczytać kodu ASCII (enter ma 13- jak dobrze pamiętam)? Przerobiona na szybko funkcja do blokowania klawiszy (nie sprawdzałem). I podczep ją pod zdarzenie onKeyUp
Kod JS:
  1. <?php
  2. var counter = 0;
  3. function sum(evt)
  4. {
  5. var keyCode
  6.  
  7. if (window.event)
  8. {
  9. keyCode = window.event.keyCode;
  10. if (keyCode == 13 && counter < 7) counter++;
  11. if (counter < 7) window.event.returnValue = true;
  12. else window.event.returnValue = false;
  13. }
  14. else
  15. {
  16. keyCode = evt.which;
  17. if (keyCode == 13 && counter < 7) counter++;
  18. if (counter < 7)
  19. {
  20. evt.returnValue = true;
  21. }
  22. else
  23. {
  24. evt.returnValue = false;
  25. evt.preventDefault();
  26. }
  27. }
  28.  
  29. document.forms["test"]["counter"].value = counter;
  30. }
  31. ?>


Kod html
  1. (...)
  2. echo '<form name="test" action="akcja" method="post">';
  3. echo '<p><textarea name="sCompanyName" cols="70" rows="4" id="sCompanyName" onkeypress="sum(event);"></textarea></p>';
  4. echo '<p>Ilość enterów: <input type="text" name="iQuantity[]" value="" id="counter" /></p>';
  5. echo '</form>';
  6. (...)
KCG
counter chyba bez '$' smile.gif
A jako evt przy wywoływaniu funkcji, co mam przekazać? I na koniec if (counter == 7) to coś tam?
Bo na razie jakoś mi nie wychodzi, ale mam nadzieję, że damy radę razem, dzięki winksmiley.jpg
Jarod
Sorry ale sam jestem początkujący w JS. Kod poprawiłem i sprawdziłem.

Pzdr

Edit: Jeszcze raz poprawiłem bo zapomniałem że ma być blokowane po 7 enterach..
KCG
Dzięki, spróbuję winksmiley.jpg

Coś nie działa, a że za bardzo też w js nie jestem, to nie wiem co. Jeśli kliknę 'wyczyść', to okienko się czyści, a już żadnego 'entera' nie można zrobić. Kolejny problemy w 7 linii nie można już nic wpisać, ani zrobic 'backspace' do poprzedniej linii.
A tak to wygląda:
http://pytak.no-ip.org/~trudny/motocykl/ga...id=55&id=10
Jarod
Dorób sobie pomniejszanie licznika. Jeśli naciśniesz backspace (kod 8) to counter--
KCG
Troche zmieniłem, jakby ktoś był zainteresowany:
  1. var counter = 0;
  2. function setCounter () {
  3. counter = 0;
  4. }
  5. function sum(evt) {
  6. var keyCode
  7.  
  8. if (window.event) {
  9. keyCode = window.event.keyCode;
  10. if (keyCode == 13 && counter < 7) counter++;
  11. if (keyCode == 8) counter--;
  12. if (counter >= 7 && keyCode == 13) window.event.returnValue = false;
  13. else window.event.returnValue = true;
  14. } else {
  15. keyCode = evt.which;
  16. if (keyCode == 13 && counter < 7) counter++;
  17. if (keyCode == 8) counter--;
  18. if (counter >= 7 && keyCode == 13) {
  19. evt.returnValue = false;
  20. evt.preventDefault();
  21. } else evt.returnValue = true;
  22. }
  23.  
  24. document.forms["f_comment"]["counter"].value = counter;
  25. }

Jeśli jest przycisk RESET to wtedy przypisujemy mu onclick="setCounter();", aby wyzerować licznik smile.gif Dodatkowo w 7 linii normalnie można pisać i jest możliwość backspace'a, czego u Jaroda nie było (blokada wszystkich klawiszy w 7 linii).

W każdym razie dzięki Jarod, że mnie naprowadziłeś winksmiley.jpg
Jarod
@KCG: Zdajesz sobie sprawę, że to nie jest jeszcze tak jak chcesz? Jak counter to wcześniej przydałoby się sprawdzić czy nsciśnięty klawisz to backspace && usuwany znak to enter...
Na stronie, do której podałeś linka widziałem że ustawiłeś na 15 enterów max. Ale da się to obejść..
KCG
Hym, faktycznie.
Masz pomysł, jak sprawdzić usuwany znak?
Jarod
Cytat(KCG @ 24.02.2008, 21:06:43 ) *
Hym, faktycznie.
Masz pomysł, jak sprawdzić usuwany znak?

Stwórz tablicę i dodawaj do niej kod naciśniętego znaku (jeśli wciśnięty znak jest różny niż backspace).
Jeśli naciskasz backspace to z końca tej tablicy pobierasz kod znaku, sprawdzasz czy to enter (jeśli tak to wtedy counter--) i usuwasz z tablicy ten znak (z końca). Jak stworzyć tablicę znajdziesz http://developer.mozilla.org/pl/docs/ja...C4%85tek#Arrays

Ale to taki pomysł bo nie znam JS i możliwe że jest do tego jakaś funkcja smile.gif A na tym forum jest tyle ludzie obcykanych w JS, że może ktoś inny wskaże Ci lepszą drogę do uzyskania tego efektu.

Pozdrawiam
KCG
To kilka pytanek:
- mogę dodawać znaki w sposób: tablica[] = keyCode; ? Czy muszę podać w [] liczbę?
- do wyciągniecia ostatniego elementu użyć lastindexOf?
- jak skrócić tablicę o ten ostatni znak?
Jarod
Cytat(KCG @ 25.02.2008, 18:39:35 ) *
To kilka pytanek:
- mogę dodawać znaki w sposób: tablica[] = keyCode; ? Czy muszę podać w [] liczbę?

Cytat
push
Dodaje nowe elementy do końca tablicy i zwraca nową długość tablicy.



Cytat(KCG @ 25.02.2008, 18:39:35 ) *
- do wyciągniecia ostatniego elementu użyć lastindexOf?
- jak skrócić tablicę o ten ostatni znak?

Cytat
pop
Usuwa ostatni element tablicy i zwraca ten element.



Źródło: http://developer.mozilla.org/pl/docs/Dokum...C5.9Bci_tablicy
KCG
Dzięki wielkie smile.gif
  1. var counter = 0;
  2. var znaki = new Array();
  3. function setCounter () {
  4. counter = 0;
  5. znaki = new Array();
  6. }
  7. function sum(evt) {
  8. var keyCode
  9.  
  10. if (window.event) {
  11. keyCode = window.event.keyCode;
  12. if (keyCode != 8) {
  13. if (counter == 7) {
  14. if (keyCode != 13) znaki.push(keyCode);
  15. } else znaki.push(keyCode);
  16. }
  17. if (keyCode == 13 && counter < 7) counter++;
  18. if (keyCode == 8) {
  19. if (znaki.pop() == 13) counter--;
  20. }
  21. if (counter >= 7 && keyCode == 13) window.event.returnValue = false;
  22. else window.event.returnValue = true;
  23. } else {
  24. keyCode = evt.which;
  25. if (keyCode != 8) {
  26. if (counter == 7) {
  27. if (keyCode != 13) znaki.push(keyCode);
  28. } else znaki.push(keyCode);
  29. }
  30. if (keyCode == 13 && counter < 7) counter++;
  31. if (keyCode == 8) {
  32. if (znaki.pop() == 13) counter--;
  33. }
  34. if (counter >= 7 && keyCode == 13) {
  35. evt.returnValue = false;
  36. evt.preventDefault();
  37. } else evt.returnValue = true;
  38. }
  39.  
  40. document.forms["f_comment"]["counter"].value = counter;
  41. document.forms["f_comment"]["znaki"].value = znaki;
  42. }

Teraz chyba okej, co? Można pod tym linkiem wcześniejszym zobaczyć, bo wrzuciłem.
Jarod
Cytat(KCG @ 26.02.2008, 17:49:07 ) *
Teraz chyba okej, co? Można pod tym linkiem wcześniejszym zobaczyć, bo wrzuciłem.

No nie do końca potestuj jeszcze smile.gif
KCG
Hym, jakbym nie testował, to bym nie wysuwał takich tez smile.gif
Możesz powiedzieć co?
Jarod
Cytat(KCG @ 26.02.2008, 18:51:28 ) *
Hym, jakbym nie testował, to bym nie wysuwał takich tez smile.gif

No to słabo testujesz smile.gif Bo mi to zajęło kilka sekund smile.gif

Wpisz:
Cytat
1
2
3
4
5
6
7

Skasuj 7 i spróbuj zrobić enter. Skasuj 7, 6 i spróbuj zrobić enter.
KCG
No faktycznie, ale widzisz gdzieś błąd?
lord_t
Trochę przeredagowałem to co zrobiliście;) Z istotnych zmian to przeniosłem 2 ify co pociągnęło za sobą zmianę siódemek na szóstki.

  1. <script type="text/javascript">
  2.  
  3. var counter = 0;
  4. var znaki = new Array();
  5. function setCounter () {
  6. counter = 0;
  7. znaki = new Array();
  8. }
  9.  
  10. function sum(evt) {
  11. var keyCode;
  12.  
  13. if (window.event) {
  14.  
  15. keyCode = window.event.keyCode;
  16. if (keyCode == 8) {
  17. if (znaki.pop() == 13) counter--;}
  18. else {
  19. if (counter == 6) {
  20. if (keyCode != 13) znaki.push(keyCode);
  21. }
  22. else znaki.push(keyCode);
  23. }
  24.  
  25. if (counter >= 6 && keyCode == 13) window.event.returnValue = false;
  26. else window.event.returnValue = true;
  27.  
  28. if (keyCode == 13 && counter < 6) counter++;
  29.  
  30. }
  31.  
  32. else
  33. {
  34. keyCode = evt.which;
  35. if (keyCode == 8) { if (znaki.pop() == 13) counter--; }
  36. else {
  37. if (counter == 6) {
  38. if (keyCode != 13) znaki.push(keyCode);
  39. }
  40. else znaki.push(keyCode);
  41. }
  42.  
  43. if (counter >= 6 && keyCode == 13)
  44. {
  45. evt.returnValue = false;
  46. evt.preventDefault();
  47. }
  48. else evt.returnValue = true;
  49.  
  50. if (keyCode == 13 && counter < 6) counter++;
  51. }
  52.  
  53. document.forms["f_comment"]["counter"].value = counter;
  54. document.forms["f_comment"]["znaki"].value = znaki;
  55. }


A co do formularza to zamieniłem onkeypress na onkeydown(<frameset> wyciąłem sobie dla przejrzystości):
  1. <form action="galeria_comments.php" method="post" name="f_comment">
  2. <textarea cols="30" rows="6" name="comment" onkeydown="sum(event);"></textarea><br />
  3.  
  4. <input type="hidden" name="counter" value="" />
  5. <input type="hidden" name="znaki" value="" />
  6. <input type="hidden" name="a" value="add_t" />
  7. <input type="hidden" name="uid" value="55" />
  8. <input type="hidden" name="id" value="10" />
  9. <input type="RESET" name="res" value="Wyczyść" onclick="setCounter();" />
  10. <input type="button" name="sub" value="Dodaj" onclick="form_comments();" />
  11. </form>


Testowałem na FF i IE 6
KCG
Z tego co widzę, to kilka 6 zamiast 7 (błędy logiczne) i trochę nie w tej kolejności? (też logiczny) Jaka różnica jest między onkeypress a -down?

Dzięki i pzdr winksmiley.jpg
Jarod
Cytat(KCG @ 27.02.2008, 13:12:51 ) *
Jaka różnica jest między onkeypress a -down?


Wiesz, jesteś straszny leń! smile.gif

http://4programmers.net/(X)HTML/Zdarzenia/...45817945009c788
http://kurs.browsehappy.pl/JavaScript/Zdarzenia
KCG
Tyle to ja się domyśliłem :] Tylko wydaję mi się, że bez różnicy co w tym przypadku się zastosuje. Ale chyba się mylę?
lord_t
Próbowałem to uruchomić na onKeyPress, dla FF działało, ale przy IE nie - tak jakby klawisz backspace nie zwracał keyCode. W wygooglowanym przykładzie działało na onKeyDown, więc przetestowałem no i śmiga.
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.