Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Tworzenie wielu obiektów na raz, for.
Forum PHP.pl > Forum > Przedszkole
tzm
  1. for(i = 1; i < 5; i++){
  2. var objEmpty = {};
  3. var objEmpty['obj'+i] = new T('obj'+i);
  4. addEventListener('mousemove', function() {obj.setStopTime();obj.go2();});
  5. addEventListener('keydown', function() {obj.setStopTime();obj.go2();});
  6. }


Co źle robię?
nospor
1) Ciezko napisac czym sie objawia blad??
2) Za kazdym razem w petli tworzysz var objEmpty = {}; przez co nadpisujesz poprzednie. A o to ci chyba nie chodzilo...

3) Rowniez to jest bez sensu
var objEmpty['obj'+i]
powinno byc
objEmpty['obj'+i]
tzm
Problem nie objawia się niczym, żadnej sensownej akcji nie widać a z debbugowania JS jestem lewy jak cholera.

Właśnie o to chodzi by dla 4 elementów div na stronie utworzyć ten obiekt osobno. Każdy div ma mieć swój licznik.

Może całość rozjaśni bardziej problem:

  1.  
  2. <!DOCTYPE html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <link rel="stylesheet" type="text/css" href="style.css">
  6. <link href='http://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'>
  7. <title>Zadanie #6</title>
  8. function T(div){
  9. var millis = 0;
  10. var sec = 0;
  11. var stopTime=0;
  12. var totalTime =0;
  13. var temp = 0;
  14. var startTime=0;
  15. var work = false;
  16. this.setStopTime = function(){
  17. stopTime = (new Date()).getTime() + 3000;
  18. }
  19. function setValue(value) {
  20. millis = Math.floor ( value % 1000 );
  21. value = Math.floor( value / 1000);
  22. sec = Math.floor ( value % 60 );
  23. value = Math.floor( value / 60 );
  24. if( value < 10 ) { value="0" + value;
  25. if( sec < 10 ) { sec = "0" + sec; }
  26. else if( millis < 100 ) { millis = "00" + millis; }
  27. }
  28. document.getElementById(div).innerHTML = value + ":" + sec +"." + millis;
  29. }
  30. this.go2 = function() {
  31. if ( work == true ) return;
  32. work = true;
  33. document.getElementById(div).style.backgroundColor="red";
  34. var currentTime = (new Date()).getTime();
  35. startTime = currentTime;
  36. var counter = setInterval(function() {
  37. if(currentTime >= stopTime){
  38. document.getElementById(div).style.backgroundColor="";
  39. clearInterval(counter);
  40. totalTime+= stopTime - startTime;
  41. work = false;
  42. setValue(totalTime);
  43. return;
  44. }
  45. temp = currentTime - startTime;
  46. setValue(temp+totalTime);
  47. currentTime = (new Date()).getTime();
  48. }, 1);
  49. }
  50. }
  51.  
  52.  
  53. for(i = 1; i > 5; i++){
  54. var obj = new T('obj'+i);
  55. addEventListener('mousemove', function() {obj.setStopTime();obj.go2();});
  56. addEventListener('keydown', function() {obj.setStopTime();obj.go2();});
  57. }
  58. </script>
  59. </head>
  60. <body>
  61.  
  62. <div id="obj1"><p>licznik 1</p></div>
  63. <div id="obj2"><p>licznik 2</p></div>
  64. <div id="obj3"><p>licznik 3</p></div>
  65. <div id="obj4"><p>licznik 4</p></div>
  66.  
  67. </body>
  68. </html>
nospor
raz masz i < 5 raz i > 5....zastanow sie na logcznoscią....
raz tworzysz tablice raz nie tworzysz....

napisalem ci jak masz poprawic pierwszy kod. Nie widze nigdzie moich uwag
tzm
@nospor dałem co miałem na moment zanim wychodziliśmy na fajkę, nie poprawione.

To:
  1. for(i = 1; i < 5; i++){
  2. var obj = new T('obj'+i);
  3. window.onload = function() {
  4. addEventListener('mousemove', function() {obj.setStopTime();obj.go2();});
  5. addEventListener('keydown', function() {obj.setStopTime();obj.go2();});
  6. };
  7. }

Działa dla jednego obiektu - ostatniego.
To:
  1. var objEmpty = {};
  2. for(i = 1; i < 5; i++){
  3. objEmpty['obj'+i] = new T('obj'+i);
  4. window.onload = function() {
  5. addEventListener('mousemove', function() {obj.setStopTime();obj.go2();});
  6. addEventListener('keydown', function() {obj.setStopTime();obj.go2();});
  7. };
  8. }

Nie działa w ogóle. Chciałbym zrozumieć gdzie błąd robię.
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.