Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Jak przerobić funkcje
Forum PHP.pl > Forum > Przedszkole
qweluke
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?
croc
Chcesz te inputy dodawać dynamicznie (np. przez kliknięcie przycisku) czy po prostu mieć ich liczbę w kodzie?
qweluke
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>
zegarek84
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

}
qweluke
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)
zegarek84
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
qweluke
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
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.