Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][HTML]pobranie wartości class i nadanie nowej
Forum PHP.pl > Forum > Przedszkole
agata
witam,
mam książkowy skrypcik generujący kartę do gry w bingo. Napisałam go i wszystko działa do momentu kiedy chcę zaznaczyć dane pole. W książce nie jest to dobrze opisane tak jakby brakowało czegoś w treści/kodzie.
  1. window.onload = inicjacja;
  2. var uzyteLiczby = new Array(76);
  3. function inicjacja() {
  4. if (document.getElementById){
  5. document.getElementById("reload").onclick = innaKarta;
  6. newKarta();
  7.  
  8. }
  9. else {
  10. alert("Twoja przeglądarka nie jest w stanie obsłużyć tego skryptu!");
  11. }
  12. }
  13. function newKarta(){
  14. for(var i=0; i<24; i++){
  15. setPole(i);
  16. }
  17. }
  18.  
  19. function setPole(thisPole){
  20. var nrPola = "pole" + thisPole;
  21. var nrKolumna = new Array(0,1,2,3,4,0,1,2,3,4,0,1,3,4,0,1,2,3,4,0,1,2,3,4);
  22. var podstawaKolumny = nrKolumna[thisPole] * 15;
  23. var newLiczba;
  24.  
  25. do {
  26. newLiczba = podstawaKolumny + getLiczba();
  27. }
  28. while (uzyteLiczby[newLiczba]);
  29.  
  30. uzyteLiczby[newLiczba] = true;
  31. document.getElementById(nrPola).innerHTML = newLiczba;
  32. document.getElementById(nrPola).className = ""; // 1 pobranie wartości class danego pola?
  33. document.getElementById(nrPola).onmousedown = toggleColor; //2 wywołanie funkcji po kliknięciu na dane pole
  34. }
  35.  
  36.  
  37. function getLiczba() {
  38. return (Math.floor(Math.random() * 15) + 1);
  39. }
  40.  
  41. function innaKarta(){
  42. for (var i=0; i<uzyteLiczby.length; i++){
  43. uzyteLiczby[i] = false;
  44. }
  45. newKarta();
  46. return false;
  47. }
  48.  
  49. function toggleColor(){
  50. /* if (evt){
  51.   var thisPole = evt.target;
  52.   }
  53.   else{
  54.   var thisPole = window.event.srcElement; //3 w tym komentarzu zawarta instrukcja jest dla explorera (wg książki)
  55.   }*/
  56. if (thisPole.className == ""){
  57. thisPole.className = "pickedBG"; //4 przypisanie parametrowi class wartości pickedBG
  58. }
  59. else{
  60. thisPole.className = "";
  61. }
  62. }


Proszę o wyjaśnienie komentarzy 1, 2, 3, 4 czy dobrze je rozumiem.

W 4 komentarzu nadawana jest wartość pickedBG dla class, czy tak?
Jeśli tak to rozumiem że wystarczy zdeklarować w css kolor dla pickedBG, jednak ja robię to w ten sposób to nie działa, karta jest generowana ale nie można zaznaczyć żadnego pola.
Jak mam to rozwiązać, ewentualnie gdzie mam błędy w skrypcie.

Kod html to zwykła tabela 5x5.
piotrooo89
próbowałeś degugować firebugiem? masz to gdzies on-line?
Blackhole
1. wyzerowanie nazwy klasy danego pola
agata
nie mam tego nigdzie, na localhoscie to stoi.

Wrzucam kod html też jakby ktoś chciał to przetestować, żeby nie trzeba było klepać tabeli.
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. <link rel="stylesheet" rev="stylesheet" href="script01.css" />
  5. <script src="bingo.js" type="text/javascript" language="javascript"></script>
  6. </head>
  7. <body>
  8. <tr>
  9. <th width="20%">B</th>
  10. <th width="20%">I</th>
  11. <th width="20%">N</th>
  12. <th width="20%">G</th>
  13. <th width="20%">O</th>
  14. </tr>
  15. <tr>
  16. <td id="pole0" class=""> </td>
  17. <td id="pole1" class=""> </td>
  18. <td id="pole2" class=""> </td>
  19. <td id="pole3" class=""> </td>
  20. <td id="pole4" class=""> </td>
  21.  
  22. </tr>
  23. <tr>
  24. <td id="pole5" class=""> </td>
  25. <td id="pole6" class=""> </td>
  26. <td id="pole7" class=""> </td>
  27. <td id="pole8" class=""> </td>
  28. <td id="pole9" class=""> </td>
  29.  
  30. </tr>
  31. <tr>
  32. <td id="pole10" class=""> </td>
  33. <td id="pole11" class=""> </td>
  34. <td id="free">wolne</td>
  35. <td id="pole12" class=""> </td>
  36. <td id="pole13" class=""> </td>
  37.  
  38. </tr>
  39. <tr>
  40. <td id="pole14" class=""> </td>
  41. <td id="pole15" class=""> </td>
  42. <td id="pole16" class=""> </td>
  43. <td id="pole17" class=""> </td>
  44. <td id="pole18" class=""> </td>
  45.  
  46. </tr>
  47. <tr>
  48. <td id="pole19" class=""> </td>
  49. <td id="pole20" class=""> </td>
  50. <td id="pole21" class=""> </td>
  51. <td id="pole22" class=""> </td>
  52. <td id="pole23" class=""> </td>
  53. </tr>
  54. </table>
  55. <p><a href="index.php" id="reload">Kliknij tutaj</a>, aby przygotować nową kartę</p>
  56.  
  57. </body>
  58. </html>


Zrobiłam mały test i wychodzi na to że funkcja toggleColor nie jest wywoływana.
nie jestem do końca pewna czy dobrze kombinuję ale zrobiłam to tak:

  1. document.getElementById(nrPola).onclick = toggleColor;
  2.  
  3. function toggleColor(){
  4. alert("cos");
  5. }


czy ja idę w ogóle w dobrą stronę, jeśli tak to dlaczego funkcja nie jest wywoływana?

Witam, z pomocą kolegi udało mi się rozwiązać problem, poniżej zamieszczam działający kod.

  1. window.onload = inicjacja;
  2. var uzyteLiczby = new Array(76);
  3.  
  4. function inicjacja() {
  5. if (document.getElementById){
  6. document.getElementById("reload").onclick = innaKarta;
  7. newKarta();
  8. }
  9. else {
  10. alert("Twoja przeglądarka nie jest w stanie obsłużyć tego skryptu!");
  11. }
  12.  
  13. }
  14. function newKarta(){
  15. for(var i=0; i<24; i++){
  16. setPole(i);
  17. }
  18. }
  19.  
  20. function setPole(thisPole){
  21. var nrPole = "pole" + thisPole;
  22. var nrKolumna = new Array(0,1,2,3,4,0,1,2,3,4,0,1,3,4,0,1,2,3,4,0,1,2,3,4);
  23. var podstawaKolumny = nrKolumna[thisPole] * 15;
  24. var newLiczba;
  25.  
  26. do {
  27. newLiczba = podstawaKolumny + getLiczba();
  28. }
  29. while (uzyteLiczby[newLiczba]);
  30.  
  31. uzyteLiczby[newLiczba] = true;
  32. var pole = document.getElementById(nrPole);
  33. pole.innerHTML = newLiczba;
  34. pole.className = "";
  35. pole.onmousedown = function(){zmianaKoloru(nrPole)};
  36. }
  37.  
  38.  
  39. function getLiczba() {
  40. return (Math.floor(Math.random() * 15) + 1);
  41. }
  42.  
  43. function innaKarta(){
  44. for (var i=0; i<uzyteLiczby.length; i++){
  45. uzyteLiczby[i] = false;
  46. }
  47. newKarta();
  48. return false;
  49. }
  50.  
  51. function zmianaKoloru(nrPole){
  52.  
  53. var pole = document.getElementById(nrPole);
  54.  
  55. if (pole.className == ""){
  56.  
  57. pole.className = "kolor";
  58. }
  59.  
  60. else{
  61. pole.className = "";
  62. }
  63. }


Należało przekazać zmienną, do funkcji zmianaKoloru ale przy jej wywoływaniu należało ją umieścić w innej funkcji tak żeby zmiana koloru nie następowała przy generowaniu nowej karty.
pozdrawiam
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.