Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [js] policzenie przejść do następnej linii w textarea (enterów)
KCG
post 19.02.2008, 12:27:49
Post #1





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 19.02.2008, 14:44:15
Post #2





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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. (...)


Ten post edytował Jarod 19.02.2008, 20:23:56


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KCG
post 19.02.2008, 19:14:13
Post #3





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 19.02.2008, 20:14:23
Post #4





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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..

Ten post edytował Jarod 19.02.2008, 20:24:22


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KCG
post 20.02.2008, 22:36:45
Post #5





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował KCG 20.02.2008, 22:39:02


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 20.02.2008, 22:51:04
Post #6





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Dorób sobie pomniejszanie licznika. Jeśli naciśniesz backspace (kod 8) to counter--


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KCG
post 24.02.2008, 15:59:55
Post #7





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 24.02.2008, 20:03:46
Post #8





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


@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ść..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KCG
post 24.02.2008, 21:06:43
Post #9





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


Hym, faktycznie.
Masz pomysł, jak sprawdzić usuwany znak?


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 25.02.2008, 08:55:57
Post #10





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KCG
post 25.02.2008, 18:39:35
Post #11





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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?


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 26.02.2008, 00:11:44
Post #12





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KCG
post 26.02.2008, 17:49:07
Post #13





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 26.02.2008, 18:01:13
Post #14





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KCG
post 26.02.2008, 18:51:28
Post #15





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


Hym, jakbym nie testował, to bym nie wysuwał takich tez smile.gif
Możesz powiedzieć co?


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 26.02.2008, 20:26:09
Post #16





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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.


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
KCG
post 26.02.2008, 22:26:02
Post #17





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


No faktycznie, ale widzisz gdzieś błąd?


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
lord_t
post 27.02.2008, 00:34:26
Post #18





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

Ostrzeżenie: (0%)
-----


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

Ten post edytował lord_t 27.02.2008, 00:37:02


--------------------
Go to the top of the page
+Quote Post
KCG
post 27.02.2008, 13:12:51
Post #19





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Jarod
post 27.02.2008, 14:42:10
Post #20





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował Jarod 27.02.2008, 14:42:45


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 04:41