Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] PRosty skrypt a jednak...
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
miallih
Witam, mam mały problem ze skryptem,
[JAVASCRIPT] pobierz, plaintext
  1. <table>
  2. <th colspan="5"> Rozdaj staty</th>
  3. <tr>
  4. <td>1</td><td><input type="button" id="minus_sila" value= "<"></td><td><span id="sila" >8</span></td><td><input type="button" id="plus_sila" value= ">"></td><td>5</td></tr>
  5. <tr>
  6. <td>1</td><td><input type="button" id="minus_zrecznosc" value= "<"></td><td><span id="zrecznosc" >8</span></td><td><input type="button" id="plus_zrecznosc" value= ">"></td><td>5</td></tr>
  7. </table>
  8. <script>
  9. var staty = ["sila", "zrecznosc"];
  10. for (var i = 0; i < staty.length; i++)
  11. {
  12. document.getElementById("plus_"+staty[i]).onclick = function (evt) {plus(i); };
  13. document.getElementById("minus_"+staty[i]).onclick = function (evt) {minus(i); };
  14. }
  15. function plus(i)
  16. {
  17. var e=document.getElementById(staty[i]);
  18. e.innerHTML++;
  19. }
  20. function minus(i)
  21. {
  22. var z=document.getElementById(staty[i]);
  23. z.innerHTML--;
  24. }
  25. </script>
[JAVASCRIPT] pobierz, plaintext


Skrypt z założenia prosty, ma zmieniać siłę i zręczność. jak przechodzi po pętli for, to alerty działają jak mają. Jak klikam na strzałki to nic się nie dzieje.
Oco chodzi?

Dzięki Thek, niestety i tak nie pomogło :/
krowal
Spróbuj tak:
[JAVASCRIPT] pobierz, plaintext
  1. e.innerHTML = parseInt(e.innerHTML) + 1;
[JAVASCRIPT] pobierz, plaintext
zegarek84
tak jak napisał @krowal + poczytaj o zasięgu zmiennych i domknięciach - w js w zasadzie prawie wszystko jest przekazywane przez referencję - zależy od kontekstu w prawdzie ale łatwiej mi będzie w ten sposób opisać jeszcze jedną lukę jaka tutaj jest:
function (evt) {plus(i); }
każda z tych funkcji i minus też przy danym zdarzeniu wykona funkcję z wartością i = staty.length; - a dlaczego - jak już wspomniałem poczytaj o domknięciach czy closures w js się to nazywa...
do przekazania zmiennej "i" z osobna jako argumentu możesz posłużyć się np. funkcją anonimową:
document.getElementById("plus_"+staty[i]).onclick = (function(i){return function (evt) {plus(i); };})(i);

poza tym elementy drzewa DOM mógłbyś wcześniej poprzypisywać do jakichś zmiennych coby ich stale nie szukać i odwoływać się do nich przez zmienne...
miallih
Jako iż jestem zabiegany póki co, to nie mogę do końca przysiąść przy skrypcie, ale jest problem, bo zastosowałem się do waszych wskazówek, i talej i tak nie działa :/ Klikam na buttony, a tam nic :/
Kemsan
[JAVASCRIPT] pobierz, plaintext
  1. <table>
  2. <th colspan="5"> Rozdaj staty</th>
  3. <tr>
  4. <td>1</td>
  5. <td>
  6. <input type="button" id="minus_sila" name="add_button" value= "<">
  7. </td>
  8. <td>
  9. <span id="sila" >8</span>
  10. </td>
  11. <td>
  12. <input type="button" id="plus_sila" name="add_button" value= ">">
  13. </td>
  14. <td>5</td>
  15. </tr>
  16. <tr>
  17. <td>1</td>
  18. <td>
  19. <input type="button" id="minus_zrecznosc" name="add_button" value= "<">
  20. </td>
  21. <td>
  22. <span id="zrecznosc" >8</span>
  23. </td>
  24. <td>
  25. <input type="button" id="plus_zrecznosc" name="add_button" value= ">">
  26. </td>
  27. <td>5</td>
  28. </tr>
  29. </table>
  30. <script>
  31. var stats = [ "sila", "zrecznosc" ], elements = [ ];
  32. window.onload = function(){
  33. for( i in stats ){
  34. document.getElementById( 'plus_'+stats[ i ] ).onclick = function(){
  35. plus( this.id.split( '_' )[1] );
  36. }
  37. document.getElementById( 'minus_'+stats[ i ] ).onclick = function(){
  38. minus( this.id.split( '_' )[1] );
  39. }
  40.  
  41. elements[ stats[ i ] ] = document.getElementById( stats[ i ] );
  42. }
  43. }
  44.  
  45. function plus( i )
  46. {
  47. elements[ i ].innerHTML = parseInt( elements[ i ].innerHTML ) + 1;
  48. };
  49.  
  50. function minus( i )
  51. {
  52. elements[ i ].innerHTML = parseInt( elements[ i ].innerHTML ) - 1;
  53. };
  54. </script>
[JAVASCRIPT] pobierz, plaintext

Działa, testowałem.
miallih
Jezu dzięki, teraz zostaje tylko zrozumienie skryptu, bo już jak rowerowałem do domu to myślałęm nawet żeby przez php wywoływać onclicka ze zmienną w buttonie, ale wiem że mając tego typu skrypt jeszce go zużyje gdzie indziej. I teraz nasuwa się problem laika. Jako, że generalnie to ma być zwracane z ajaxowego requesta jako document.innerHTML. W momencie kiedy zostawimiy window.onload to nam sie wszystko posypie, bo nie będzie pierwszy onload działał. Chyba będę musiał przysiąć do HF javaScript :] tam powinno się znaleźć rozwiązanie biggrin.gif
Kemsan
Działa także bez window.onload (){ }, dodałem tylko dla pewności 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.