Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][JavaScript]Problem z tworzeniem dynamicznej wypełnienia tabeli HTML w Javascript
Forum PHP.pl > Forum > Przedszkole
bassyl
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 :-(
Orzeszekk
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.

bassyl
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.
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.