Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript] Jak przerobić funkcje, aby nie dodawać kolejnych pętli
qweluke
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


Userzy,

mam taką oto funkcję

[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript" language="JavaScript">
  2. <!--
  3. function suma(){
  4. var TablicaIloscElem=5;
  5. var Suma1=0;
  6. var IloscPol=20;
  7.  
  8. var tablica = [
  9. ['6', '6', '8'],
  10. ['8', '8', '6'],
  11. ['8-', '8', '8'],
  12. ['8q', '6', '8'],
  13. ['8e', '8', '6'],
  14. ['15', '8', '6'],
  15. ];
  16.  
  17.  
  18. for(i=1;i<=IloscPol;i++) {
  19. wiersz1=document.Suma1['pole'+i].value;
  20.  
  21. //zabezpieczenie w przypadku pozostawienia pustego inputa
  22. if (wiersz1 == "") {
  23. wiersz1 = 0;
  24. }
  25.  
  26. //jeżeli input nie jest pusty
  27. else {
  28. for ($z = 0; $z <= TablicaIloscElem; $z++) {
  29. if (tablica[$z][0] == wiersz1) {
  30. wiersz1=parseInt('0'+tablica[$z][1],10);
  31. break;
  32. }
  33. }
  34.  
  35. }
  36. Suma1+=wiersz1;
  37.  
  38. }
  39.  
  40. document.Suma1.Suma1.value = Suma1;
  41.  
  42. }
  43. //-->
  44. </script>
[JAVASCRIPT] pobierz, plaintext


i takie oto pole inputów
  1. <form action="1.html" name="Suma1">
  2. <input type="text" size="1" onBlur="suma()" name="pole1"/>
  3. <input type="text" size="1" onBlur="suma()" name="pole2"/>
  4. <input type="text" size="1" onBlur="suma()" name="pole3"/>
  5. <input type="text" size="1" onBlur="suma()" name="pole4"/>
  6. <input type="text" size="1" onBlur="suma()" name="pole5"/>
  7. <input type="text" size="1" onBlur="suma()" name="pole6"/>
  8. <input type="text" size="1" onBlur="suma()" name="pole7"/>
  9. <input type="text" size="1" onBlur="suma()" name="pole8"/>
  10. <input type="text" size="1" onBlur="suma()" name="pole9"/>
  11. <input type="text" size="1" onBlur="suma()" name="pole10"/>
  12. <input type="text" size="1" onBlur="suma()" name="pole11"/>
  13. <input type="text" size="1" onBlur="suma()" name="pole12"/>
  14. <input type="text" size="1" onBlur="suma()" name="pole13"/>
  15. <input type="text" size="1" onBlur="suma()" name="pole14"/>
  16. <input type="text" size="1" onBlur="suma()" name="pole15"/>
  17. <input type="text" size="1" onBlur="suma()" name="pole16"/>
  18. <input type="text" size="1" onBlur="suma()" name="pole17"/>
  19. <input type="text" size="1" onBlur="suma()" name="pole18"/>
  20. <input type="text" size="1" onBlur="suma()" name="pole19"/>
  21. <input type="text" size="1" onBlur="suma()" name="pole20"/>
  22. <input disabled="disabled" type="text" size="1" name="Suma1"/>
  23. </form>


Wszystko działa, ale problem pojawia sie w momencie gdy chce stworzyc kolejne inputy Suma2, 3,4...100...150

Bezsensem jest kopiowanie tej funkcji czy dodawanie kolejnych formow do niej, na pewno da sie przeniesc jakos parametr do funkcji aby wiedziala dla ktorej Sumy ma obliczac wartosci. Problem w tym ,ze nie wiem jak to zrobic.
Moze jakies wskazowki za wszej strony?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
croc
post
Post #2





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Chcesz te inputy dodawać dynamicznie (np. przez kliknięcie przycisku) czy po prostu mieć ich liczbę w kodzie?
Go to the top of the page
+Quote Post
qweluke
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


nie, inputy musza zostac tak jak sa (czyli w kodzie).
Kwestia tylko aby dla każdego wiersza z formami (suma1, suma2, suma3...) nie tworzyć nowego skrypu JS ktory bedzie to zliczal tylko wykorzystac ta funkcje

  1. <form action="1.html" name="Suma1">
  2. <input type="text" size="1" onBlur="suma()" name="pole1"/>
  3. <input type="text" size="1" onBlur="suma()" name="pole2"/>
  4. <input type="text" size="1" onBlur="suma()" name="pole3"/>
  5. .....
  6. <input type="text" size="1" onBlur="suma()" name="pole20"/>
  7. <input disabled="disabled" type="text" size="1" name="Suma1"/>
  8. </form>
  9. <form action="1.html" name="Suma2">
  10. <input type="text" size="1" onBlur="suma()" name="pole1"/>
  11. <input type="text" size="1" onBlur="suma()" name="pole2"/>
  12. <input type="text" size="1" onBlur="suma()" name="pole3"/>
  13. .....
  14. <input type="text" size="1" onBlur="suma()" name="pole20"/>
  15. <input disabled="disabled" type="text" size="1" name="Suma2"/>
  16. </form>
  17. <form action="1.html" name="Suma3">
  18. <input type="text" size="1" onBlur="suma()" name="pole1"/>
  19. <input type="text" size="1" onBlur="suma()" name="pole2"/>
  20. <input type="text" size="1" onBlur="suma()" name="pole3"/>
  21. .....
  22. <input type="text" size="1" onBlur="suma()" name="pole20"/>
  23. <input disabled="disabled" type="text" size="1" name="Suma3"/>
  24. </form>


Ten post edytował qweluke 28.10.2011, 22:34:49
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


przy onblur funkcja nie działa już na element input a na window - sprawdź referencję do this - ustaw sobie funkcję na onfocus gdzie do zmiennej będziesz zapisywał sobie element this (dany input) - przed onblur masz onfocus... potem w funkcji suma odwołujesz się do danej zmiennej i do parentNode - to jest formularz w którym znajduje się element input... dalej powinieneś mieć z górki - a jak nie to daj swoje próby działania... a do debugowania kodu korzystaj z mozilli i pluginu firebug...

dobra - prowizoryczny kod gdyż nie chce mi się dopisywać focus:
Kod
els = [].slice.call(document.getElementsByTagName('input'));
els.forEach(function(el){el.onfocus = function(){window.focused = this;}}); //forEach nie na każdej przeglądarce zadziała i to co w tych 2 linijkach robię musi być wykonane po załadowaniu dom - prościej będzie dla Ciebie przypisać funkcję pod onfocus = fucused_set(); i zdefiniować funkcję function focused_set(){window.focused = this;};

function suma(){
var TablicaIloscElem=5;
var Suma1=0;
var IloscPol=20;

var tablica = [
['6', '6', '8'],
['8', '8', '6'],
['8-', '8', '8'],
['8q', '6', '8'],
['8e', '8', '6'],
['15', '8', '6'],
];

  var inputs = window.focused.parentNode.getElementsByTagName('input'); //window.focused.parentNode - formularz
for(i=1;i<=IloscPol;i++) {
wiersz1=window.focused.parentNode['pole'+i].value;

//zabezpieczenie w przypadku pozostawienia pustego inputa
if (wiersz1 == "") {
wiersz1 = 0;
}

//jeżeli input nie jest pusty
else {
for ($z = 0; $z <= TablicaIloscElem; $z++) {
if (tablica[$z][0] == wiersz1) {
wiersz1=parseInt('0'+tablica[$z][1],10);
break;
}
}

}
Suma1+=wiersz1;

}

inputs[inputs.length-1].value = Suma1; //nie chce mi się zgadywać nazwy - zawsze to ostatni input;p

}


Ten post edytował zegarek84 28.10.2011, 23:36:05


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
qweluke
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


Dzięki kolego za szybką odpowiedź i Twoją pomoc, problem jednak w tym, że JS uczę się od kilku dni i jeszcze za bardzo nie wiem o czym do mnie mówisz biggrin.gif

Cytat
//forEach nie na każdej przeglądarce zadziała i to co w tych 2 linijkach robię musi być wykonane po załadowaniu dom - prościej będzie dla Ciebie przypisać funkcję pod onfocus = fucused_set(); i zdefiniować funkcję function focused_set(){window.focused = this;};


Jeżeli dobrze zrozumiałem to mam stworzyć kolejną funkcję
[JAVASCRIPT] pobierz, plaintext
  1. function focused_set()
  2. {window.focused = this;}
[JAVASCRIPT] pobierz, plaintext


a w
[JAVASCRIPT] pobierz, plaintext
  1. function suma(){
[JAVASCRIPT] pobierz, plaintext

odwoływać się do funkcji focused_set?

I jeszcze mam pytanie, bo będę miał kilkadziesiąt <form action="1.html" name="SumaX"></form>
gdzie X to numer sumy, i dla każdego forma ma to się obliczać osobno
tutaj przykład:

http://www.lumi.yoyo.pl/scripts/sumy.html

i raczej mialem na mysli, czy da sie ta funkcje tak przerobic, zeby podawac jej parametr "sumax" np. suma3, albo suma4 i dla tego inputa wykonywala te dodawania (tak jak jest to teraz, onblur, albo onkeyup)

Ten post edytował qweluke 29.10.2011, 08:29:18
Go to the top of the page
+Quote Post
zegarek84
post
Post #6





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


więc chcesz to zrobić jak zrozumiałem w ten sposób, że onblur = "suma('Suma1')" - funkcje przerobiłem prawie nic nie zmieniając by łatwiej Ci było zrozumieć zmiany (można to było zoptymalizować), nie sprawdzałem ale będzie działać....
[JAVASCRIPT] pobierz, plaintext
  1. function suma(s){
  2. var TablicaIloscElem=5;
  3. var Suma1=0;
  4. var IloscPol=20;
  5.  
  6. var tablica = [
  7. ['6', '6', '8'],
  8. ['8', '8', '6'],
  9. ['8-', '8', '8'],
  10. ['8q', '6', '8'],
  11. ['8e', '8', '6'],
  12. ['15', '8', '6'],
  13. ];
  14.  
  15.  
  16. for(i=1;i<=IloscPol;i++) {
  17. wiersz1=document[s]['pole'+i].value;
  18.  
  19. //zabezpieczenie w przypadku pozostawienia pustego inputa
  20. if (wiersz1 == "") {
  21. wiersz1 = 0;
  22. }
  23.  
  24. //jeżeli input nie jest pusty
  25. else {
  26. for ($z = 0; $z <= TablicaIloscElem; $z++) {
  27. if (tablica[$z][0] == wiersz1) {
  28. wiersz1=parseInt('0'+tablica[$z][1],10);
  29. break;
  30. }
  31. }
  32.  
  33. }
  34. Suma1+=wiersz1;
  35.  
  36. }
  37.  
  38. document[s][s].value = Suma1;
  39.  
  40. }
[JAVASCRIPT] pobierz, plaintext


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
qweluke
post
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


dokladnie, o to mi chodzilo!
probowalem to zrobic wczesniej samemu, podobnie jak Ty to zrobiles, z tym ze nie dawalem
[JAVASCRIPT] pobierz, plaintext
  1. wiersz1=document[s]['pole'+i].value;
[JAVASCRIPT] pobierz, plaintext

a
[JAVASCRIPT] pobierz, plaintext
  1. wiersz1=document.s['pole'+i].value;
[JAVASCRIPT] pobierz, plaintext


ale w tedy tez nie mialem zainstalowanego firebuga wiec nie wiedzialem gdzie robie blad.

Dzieki kolego za pomoc smile.gif
dobrze, ze mamy takich userow jak Ty, na forum - skorych do pomocy smile.gif

Ten post edytował qweluke 29.10.2011, 09:59:07
Go to the top of the page
+Quote Post

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 Aktualny czas: 19.08.2025 - 15:49