Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][JavaScript]Problem z tworzeniem dynamicznej wypełnienia tabeli HTML w Javascript
bassyl
post 19.02.2012, 02:55:55
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.01.2008

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


Witam

Mam problem z wypełnieniem tabeli HTML losowymi liczbami generowanymi za pomocą Javascriptu. Dopiero raczkuje w tej tematyce i krok po kroku zaczynam studiować książkę "Po prostu Javascript i Ajax". Niestety, zatosowana tam pętla FOR nie działa.
Poniżej zamieszczam kod:
Kod
var usedNums = new Array(76);

function initAll(){
  if (document.getElementById){
    for (var i=0; i<24; i++){
      setSquare(i);// jeśli w pętli wstawię alerta to jedyny wynik zwrócony przez przeglądarkę to 0, a gdzie pozostałe 23 liczby?
    }
  }
  else{
    alert ("Przykro mi, ale Twoja przegladarka nie jest w stanie obsluzyc tego skryptu");
  }
}

function setSquare(thisSquare){
  var currSquare = "square" + thisSquare;
  var colPlace = new Array(0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4);
  var colBasis = colPlace[thisSquare] * 15;
  var newNum;
  
  do {
    newNum = colBasis + getNewNum() + 1;
  }
  while (usedNums[newNum]);
  usedNum[newNum] = true;
  document.getElementById(currSquare).innerHTML = newNum;
}

function getNewNum(){
  return Math.floor(Math.random() * 15);
}

Proszę o wskazanie miejsca, w którym występuje błąd, powodujący brak wyniku, którym byłoby wypełnienie tabeli losowymi liczbami.

Pozdrawiam i gorąco liczę na odzew. Pewnie to jakiś drobny błąd, który wkradł się do książki, ale teoretycznie moim zdaniem powyższy kod powinien działać, a nie działa :-(
Go to the top of the page
+Quote Post
Orzeszekk
post 19.02.2012, 03:52:26
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


w zaleznosci od przegladarki z ktorej korzystasz powinienes miec jakas konsole błędów albo feature "break on exception".

zeby powiedziec dokladnie gdzie masz błąd to troche za mało kodu, musialbys dac rowniez tą tabelke w htmlu którą chcesz zapelnic liczbami.

W ogole to najlepiej na początek zabawy z javascriptem daj sobie spokoj z czystym javascriptem - tylko sie zrazisz. Uzywaj jQuery. Biblioteka jQuery niweluje roznice miedzy przegladarkami na poziomie javascriptu, bez jQuery musisz pisac kod na kilka przeglądarek na raz.

Alerta wstawiasz przed czy za setSquare(i) ? Bo jezeli wstawiasz go przed i otrzymujesz tylko jeden wynik, to najprawdopodobniej w setSquare jest błąd który powoduje wyrzucenie wyjątku i zatrzymanie wykonywania skryptu. Najprawdopodobniej jesli zakomentujesz w tej petli setSquare, a zostawisz sam alert(i), powinienes uzyskac 24 alerty, to raczej nie w petli jest problem tylko w tym setSquare.

Tak patrzac na szybko problemem moze byc innerHtml, niektore przegladarki posiadaja ten parametr pod inną nazwa z tego co pamietam ze swoich bojów w javascripcie. za to metoda jquery $(element).html('tekst_do_ustawienia'); dziala jednakowo pod kazdą przegladarką biggrin.gif

Najlepiej uzyj firebuga / opery dragonfly / chromowskiego "przegląd elementu" czy nawet F12 w internet explorerze i poustawiaj breakpointy i sprawdzaj linijka po linijce w ktorym momencie skrypt sie wykrzacza.



--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
bassyl
post 22.02.2012, 20:09:41
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.01.2008

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


Po ponownym przeanalizowaniu kodu i skorzystaniu z proponowanej obsługi błędów smile.gif okazało się, że problem tkwił nie tyle w pliku js, a w html: źle nadane nazwy id dla kolejnych elementów tabeli, które nie pokrywały się w 100% z dynamicznie generowanymi id z kodu js. Sama funkcja setSquare() była ok. Dopatrzyłem się też małej literówki. Było:

usedNum[newNum] = true;

a powinno być:

usedNums[newNum] = true;

Odnośnie jQuery, również mam zamiar się nią zając, ale wpierw chciałbym dobrze opanować podstawy JS.

Dziękuję za odzew i poradę smile.gif. Temat uważam za zamknięty.
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: 2.05.2025 - 04:22