Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Obliczenia dynamiczne
lubiemdziem
post 17.07.2012, 10:39:22
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 13.06.2008

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


Witam, mam taki oto skrypt:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
  2. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" >
  3. <script type="text/javascript" src="http://eresa.pl/cc.js"></script>
  4. </head>
  5.  
  6. <form>
  7. <input id="dane1" type="text" name="dane1" onkeyup="jeden(this.form)" maxlength="2" value="60">
  8. <input id="dane2" type="text" name="dane2" onkeyup="dwa(this.form)" maxlength="9" value="273742">
  9. <br />
  10. <input id="dane11" type="text" name="dane11" onkeyup="piec(this.form)" maxlength="2" value="80">
  11. <input id="dane12" type="text" name="dane12" onkeyup="szesc(this.form)" maxlength="9" value="1986068">
  12. </form>
  13. &nbsp;
  14.  
  15. <form>
  16. <label>Input3: <input id="dane3" name="wynik" type="text" onkeyup="trzy()" value="1712326"></label>
  17. </form>
  18.  
  19. <script type="text/javascript">
  20. // część konfiguracyjna
  21. var stala=0.5; //stala - mnoznik
  22. var input1=10000; //STAŁĄ WARTOŚĆ CHCĘ ZMIENIĆ NA WARTOŚĆ POKAZYWANĄ W INPUT3, który liczę ze wzoru: document.getElementById("dane3").value = parseFloat(document.getElementById("dane12").value) - parseFloat(document.getElementById("dane2").value);
  23.  
  24. // pozycje tabeli
  25. var pozycje= new Array(
  26. [5,1,'Lemon',80],
  27. [8,2,'Apple',100],
  28. [11,3,'orange',200],
  29. [15,3,'banana',300]
  30. );
  31. // pozycje do ukrywania - lista id rozdzielona kreskami (również na krańcach)
  32. var wyroznione= '|8|15|';
  33. var kolor= 'yellow'; //kolor wyróżnienia
  34.  
  35. //funkcje modyfikujace zawartosc
  36.  
  37. // przelicza pozycję poz
  38. function przelicz(poz)
  39. {
  40. id= pozycje[poz][0];
  41. L2= (pozycje[poz][3]==0? '' : Math.ceil(input1/pozycje[poz][3])); // obliczenie liczba2
  42. document.getElementById('L2_'+id).innerHTML= L2; // wstawienie L2 do kolumny
  43. Inp2= document.getElementById('Inp2_'+id).value; // pobranie zawartosci inputa
  44. L4= Inp2*L2; //obliczenie liczba4
  45. document.getElementById('L4_'+id).innerHTML= L4;
  46. //podstawienie liczba5 w zaleznosci od stanu checkboxa cb1
  47. document.getElementById('L5_'+id).innerHTML=
  48. document.getElementById('cb1').checked? pozycje[poz][3]*stala : pozycje[poz][3];
  49. }
  50. // przelicza wszystkie pozycje
  51. function przelicz_wszystkie()
  52. {
  53. for(i=0;i<pozycje.length;i++)
  54. przelicz(i);
  55. }
  56.  
  57. //wyróznienie wybranych pozycji
  58. function wyroznij()
  59. {
  60. for(i=0;i<pozycje.length;i++)
  61.  
  62. if (wyroznione.indexOf('|'+pozycje[i][0]+'|')>=0) //czy pozycja o danym id jest w zmiennej wyróżnione
  63.  
  64. {
  65. if (document.getElementById('cb2').checked)
  66. document.getElementById('tr'+pozycje[i][0]).bgColor= kolor;
  67. else
  68. document.getElementById('tr'+pozycje[i][0]).bgColor= '';
  69. }
  70. }
  71. //ukrywanie wybranych pozycji
  72. function ukryj()
  73. {
  74. for(i=0;i<pozycje.length;i++)
  75. if (wyroznione.indexOf('|'+pozycje[i][0]+'|')>=0) //czy pozycja o danym id jest w zmiennej wyróżnione
  76. {
  77. if (document.getElementById('cb3').checked)
  78. document.getElementById('tr'+pozycje[i][0]).style.display= 'none';
  79. else
  80. document.getElementById('tr'+pozycje[i][0]).style.display= '';
  81. }
  82. }
  83.  
  84. <input type="checkbox" id="cb1" onclick="przelicz_wszystkie();"> <label >przemnóż</label>
  85. <input type="checkbox" id="cb2" onclick="wyroznij();"> <label >wyróżnij</label>
  86. <input type="checkbox" id="cb3" onclick="ukryj();"> <label >ukryj</label>
  87. <table border="1" cellpadding="3" >
  88. <tr><th>Nr</th><th style="display:none;">ID</th><th>PRZEDMIOT</th><th>LICZBA</th><th>LICZBA2</th><th>LICZBA3</th><th>LICZBA4</th><th>LICZBA5</th></tr>
  89.  
  90. <script type="text/javascript">
  91. // wypelnienie tabeli wg danych w tablicy pozycje
  92. for(i=0;i<pozycje.length;i++)
  93. {
  94. p= pozycje[i];
  95. document.write('<tr id="tr'+p[0]+'"><td style="display:none;">'+p[0]+'</td><td>'+p[1]+'</td><td>'+p[2]+'</td><td>'+p[3]+'</td>');//kolumny stale
  96. document.write('<td id="L2_'+p[0]+'"></td>');//liczba 2
  97. document.write('<td><input type="text" size="5" id="Inp2_'+p[0]+'" onkeyup="przelicz('+i+')"></td>');//input 2
  98. document.write('<td id="L4_'+p[0]+'"></td><td id="L5_'+p[0]+'"></td></tr>');//liczba 4,5
  99. }
  100. przelicz_wszystkie(); // pierwsze przeliczenie wszystkich pozycji
  101.  
  102. </body>
  103. </html>


I w linii 25 chcę zmienić wartość stałą na wartość z input3. Wydaje mi się że odpowiedzialne są linie 25 i 100.
Pozdrawiam
Go to the top of the page
+Quote Post
piotrex41
post 17.07.2012, 10:53:04
Post #2





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

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


Nie rozumiem problemu. Po prostu podstaw pod zmienną wynik działania, którego wzór podałeś w komentarzu. Polecam zdebugować czy dobrze się wylicza używając metody alert().


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
lubiemdziem
post 17.07.2012, 10:57:19
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 13.06.2008

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


Wtedy nie działa dynamicznie. Wynik pojawia się od razu po załadowaniu strony - a później gdy ruszam input3 nic się nie dzieje
Go to the top of the page
+Quote Post
piotrex41
post 17.07.2012, 10:58:57
Post #4





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

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


No bo jak ma liczyć, skoro nie wprowadzasz danej? Najpierw musisz przekazać wartość z inputa i dopiero policzy...

U mnie poszło bez problemu:
Kod
<form>
<label>Input3: <input id="dane3"  name="wynik" type="text" onkeyup="trzy()"></label>
</form>

<script type="text/javascript">
// część konfiguracyjna
var stala=0.5;  //stala - mnoznik
var input1= document.getElementById("dane3").value = parseFloat(document.getElementById("dane12").value) - parseFloat(document.getElementById("dane2").value);


Jak zmieniam wartości inputów dane12 i dane2 to wartość w inpucie dane3 się zmienia dynamicznie.

Ten post edytował piotrex41 17.07.2012, 11:04:07


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
lubiemdziem
post 17.07.2012, 11:09:25
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 13.06.2008

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


To nadal nie to, trochę nie dopracowałem tematu ale chodziło mi o kolumnę LICZBA2

edit: przeczytałem pierwszy post jeszcze raz i chyba byłem zamyślony pisząc go ;P

Ten post edytował lubiemdziem 17.07.2012, 11:11:48
Go to the top of the page
+Quote Post
piotrex41
post 17.07.2012, 11:12:45
Post #6





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

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


To opisz dokładnie o co Ci chodzi, bo piszesz, a jak podałem Ci odpowiedź to nagle nie o to Ci chodzi. Opisz dokładnie problem, to spróbuję pomóc.


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
lubiemdziem
post 17.07.2012, 11:17:48
Post #7





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 13.06.2008

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


Już już , sorry biggrin.gif

Linia 25 wygląda następująco:

var input1=10000;

Jak widać jest przypisana stała wartość. Oddziaływuje ona na kolumnę LICZBA2.

Moim celem jest poprawienie skryptu, tak, że zamiast input1=10000; wstawiam dynamiczną wartość z inputa3. Czyli: gdy zmieniam cokolwiek w inputach wyżej (input3 to ich podsumowanie) to kolumna LICZBA2 powinna obliczać nową wartość dynamicznie.

Teraz już jasne? wink.gif

EDIT:

i tu jeszcze dodam: Odpowiedzialne za to są linie 25 i 100. Trzeba może dodać onkeyup i poprawić funkcję przelicz? Nie wiem, dlatego tu się pojawiłem z problemem

Ten post edytował lubiemdziem 17.07.2012, 11:19:20
Go to the top of the page
+Quote Post
piotrex41
post 17.07.2012, 11:19:43
Post #8





Grupa: Zarejestrowani
Postów: 168
Pomógł: 26
Dołączył: 15.09.2011
Skąd: Wrocław

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


Nie. Liczba2 teraz jest dynamiczna? Jeśli tak, to skąd bierze wartość? Jakim wzorem chcesz liczyć wartość inputa1 i co ma być z niego przekazywane do liczba2? Opisz krok po kroku.


--------------------
www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion
Go to the top of the page
+Quote Post
lubiemdziem
post 17.07.2012, 11:33:16
Post #9





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 13.06.2008

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


Wiesz, to nie jest skrypt mojego autorstwa i nie ogarniam javascript

Liczba2 liczona jest w wierszu 44

dostałem taką odpowiedź:

W tym miejscu są deklaracje, które wykonują się tylko raz przy otwarciu strony.
Żeby zmieniało się dynamicznie, to do inputów trzeba dorobić obsługe zdarzenia onchange albo onkeyup jak w linii 85.
Natomiast to wyrażenie z 25 najlepiej dodać do funkcji przelicz(), gdzieś przed pierwszym użyciem w niej input1

Może to pomoże?
Go to the top of the page
+Quote Post
wNogachSpisz
post 17.07.2012, 11:35:54
Post #10





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Debugowanie przy pomocy alertów jest dobre gdy dopiero zaczynasz zabawę z JavaScript, nie czujesz się w nim swobodnie i nie rozumiesz jak mogą pomóc debuger i konsola. W chwili gdy masz już pojęcie co to jest DOM, potrafisz tworzyć funkcje, obiekty, klasy a nawet closures (nie wiem jak to słówko się tłumaczy), warto poświęcić trochę czasu i zorganizować sobie środowisko developerskie. Polecam Opera Dragonfly lub trochę gorszy Mozilla Firebug.

Ten post edytował wNogachSpisz 17.07.2012, 11:39:59
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 Wersja Lo-Fi Aktualny czas: 8.06.2025 - 09:35