Avatar billede nc85 Nybegynder
20. november 2008 - 15:13 Der er 10 kommentarer og
1 løsning

Check på om object er null

Har et lille problem, har et script der udskriver nogle divs alt efter hvor mange billeder og tekst der er, for hver div der udskriver den noget...

problemet er at antallet af divs der bliver skrevet ud kan være X, men har fx nedenstående:

var showcat1 = 0;
var showcat2 = 0;
var showcat3 = 0;
var showcat4 = 0;
var showcat5 = 0;
var showcat6 = 0;
var showcat7 = 0;

function toggleGallery(img_id) {
        cat1 = document.getElementById("gal_img1");
        cat2 = document.getElementById("gal_img2");
        cat3 = document.getElementById("gal_img3");
        cat4 = document.getElementById("gal_img4");
        cat5 = document.getElementById("gal_img5");
        cat6 = document.getElementById("gal_img6");
        cat7 = document.getElementById("gal_img7");
       
        txt1 = document.getElementById("imgtxt1");
        txt2 = document.getElementById("imgtxt2");
        txt3 = document.getElementById("imgtxt3");
        txt4 = document.getElementById("imgtxt4");
        txt5 = document.getElementById("imgtxt5");
        txt6 = document.getElementById("imgtxt6");
        txt7 = document.getElementById("imgtxt7");
       
        //Bruges til at vise de pågældende classes og divs
        if (img_id == 1) {
       
            txt7.style.display = "none";
            txt6.style.display = "none";
            txt5.style.display = "none";
            txt4.style.display = "none";
            txt3.style.display = "none";
            txt2.style.display = "none";
       
            cat7.style.display = "none";
            cat6.style.display = "none";
            cat5.style.display = "none";
            cat4.style.display = "none";
            cat3.style.display = "none";
            cat2.style.display = "none";
            if (showcat1 == 0) {
                cat1.style.display = "block";
                txt1.style.display = "block";
                showcat1 = 1
            }
            else {
                cat1.style.display = "none";
                txt1.style.display = "none";
                showcat1 = 0
            }
        }

--------------------------------------

Problemet er så hvis fx der kun er udskrevet 2 divs, så kan scriptet ikke udføres da den ikke kan få fat i cat3, cat4, cat5, osv, og det samme med txt5, txt6, txt7 osv...

How do i make this work ?? :)
Avatar billede nc85 Nybegynder
20. november 2008 - 15:43 #1
Hele scriptet ser sådanne ud: var showcat1 = 0;
var showcat2 = 0;
var showcat3 = 0;
var showcat4 = 0;
var showcat5 = 0;
var showcat6 = 0;
var showcat7 = 0;

function toggleGallery(img_id) {

       
        cat1 = document.getElementById("gal_img1");
        cat2 = document.getElementById("gal_img2");
        cat3 = document.getElementById("gal_img3");
        cat4 = document.getElementById("gal_img4");
        cat5 = document.getElementById("gal_img5");
        cat6 = document.getElementById("gal_img6");
        cat7 = document.getElementById("gal_img7");
       
        txt1 = document.getElementById("imgtxt1");
        txt2 = document.getElementById("imgtxt2");
        txt3 = document.getElementById("imgtxt3");
        txt4 = document.getElementById("imgtxt4");
        txt5 = document.getElementById("imgtxt5");
        txt6 = document.getElementById("imgtxt6");
        txt7 = document.getElementById("imgtxt7");
       
        //Bruges til at vise de pågældende classes og divs
        if (img_id == 1) {
           
           
            if (showcat1 == 0) {
                cat1.style.display = "block";
                txt1.style.display = "block";
                showcat1 = 1
            }
            else {
                cat1.style.display = "none";
                txt1.style.display = "none";
                showcat1 = 0
            }
        }
        if (img_id == 2) {
           
            txt7.style.display = "none";
            txt6.style.display = "none";
            txt5.style.display = "none";
            txt4.style.display = "none";
            txt3.style.display = "none";
       
            cat7.style.display = "none";
            cat6.style.display = "none";
            cat5.style.display = "none";
            cat4.style.display = "none";
            cat3.style.display = "none";
            if (showcat2 == 0){
                cat2.style.display = "block";
                txt2.style.display = "block";
                showcat2 = 1;
            }
            else {
                cat2.style.display = "none";
                txt2.style.display = "none";
                showcat2 = 0;
            }
            cat1.style.display = "none";
            txt1.style.display = "none";
        }
        if (img_id == 3){
           
            txt7.style.display = "none";
            txt6.style.display = "none";
            txt5.style.display = "none";
            txt4.style.display = "none";
       
            cat7.style.display = "none";
            cat6.style.display = "none";
            cat5.style.display = "none";
            cat4.style.display = "none";
            if (showcat3 == 0) {
                cat3.style.display = "block";
                txt3.style.display = "block";
                showcat3 = 1;
            }
            else {
                cat3.style.display = "none";
                txt3.style.display = "none";
                showcat3 = 0;
            }
            cat2.style.display = "none";
            cat1.style.display = "none";
           
            txt2.style.display = "none";
            txt1.style.display = "none";
        }
        if (img_id == 4) {
           
            txt7.style.display = "none";
            txt6.style.display = "none";
            txt5.style.display = "none";
       
            cat7.style.display = "none";
            cat6.style.display = "none";
            cat5.style.display = "none";
            if (showcat4 == 0) {
                cat4.style.display = "block";
                txt4.style.display = "block";
                showcat4 = 1;
            }
            else {
                cat4.style.display = "none";
                txt4.style.display = "none";
                showcat4 = 0;
            }
            cat3.style.display = "none";
            cat2.style.display = "none";
            cat1.style.display = "none";
           
            txt3.style.display = "none";
            txt2.style.display = "none";
            txt1.style.display = "none";
        }
        if (img_id == 5) {
           
            txt7.style.display = "none";
            txt6.style.display = "none";
       
            cat7.style.display = "none";
            cat6.style.display = "none";
            if (showcat5 == 0) {
                cat5.style.display = "block";
                txt5.style.display = "block";
                showcat5 = 1;
            }
            else {
                cat5.style.display = "none";
                txt5.style.display = "none";
                showcat5 = 0;
            }
            cat4.style.display = "none";
            cat3.style.display = "none";
            cat2.style.display = "none";
            cat1.style.display = "none";
           
            txt4.style.display = "none";
            txt3.style.display = "none";
            txt2.style.display = "none";
            txt1.style.display = "none";
        }
        if (img_id == 6) {
            cat7.style.display = "none";
            txt7.style.display = "none";   
            if (showcat6 == 0) {
                cat6.style.display = "block";
                txt6.style.display = "block";
                showcat6 = 1;
            }
            else {
                cat6.style.display = "none";
                txt6.style.display = "none";
                showcat6 = 0;
            }
            cat5.style.display = "none";
            cat4.style.display = "none";
            cat3.style.display = "none";
            cat2.style.display = "none";
            cat1.style.display = "none";
           
            txt5.style.display = "none";
            txt4.style.display = "none";
            txt3.style.display = "none";
            txt2.style.display = "none";
            txt1.style.display = "none";
        }
        if (img_id == 7) {
           
            if (showcat7 == 0) {
                cat7.style.display = "block";
                txt7.style.display = "block";
                showcat7 = 1;
            }
            else {
                cat7.style.display = "none";
                txt7.style.display = "none";
                showcat7 = 0;
            }
            cat6.style.display = "none";
            cat5.style.display = "none";
            cat4.style.display = "none";
            cat3.style.display = "none";
            cat2.style.display = "none";
            cat1.style.display = "none";
           
            txt6.style.display = "none";
            txt5.style.display = "none";
            txt4.style.display = "none";
            txt3.style.display = "none";
            txt2.style.display = "none";
            txt1.style.display = "none";
        }

}


Hvis det er til nogen bedre hjælp ?
Avatar billede softspot Forsker
20. november 2008 - 15:45 #2
Du kan gennemløbe elementerne i en løkke og arbejde med dem der er.

var showcat = [0,0,0,0,0,0,0];

function toggleGallery(img_id) {
  for(var i = 0; i < 7; i++) {
    if(img_id == 1) {
      var cat = document.getElementById("gal_img" + (i + 1));
      var txt = document.getElementById("imgtxt" + (i + 1));
      if(txt && cat) {
        if(showcat[i] == 0) {
          cat.style.display = "block";
          txt.style.display = "block";
          showcat[i] = 1;
        }
        else {
          cat.style.display = "none";
          txt.style.display = "none";
          showcat[i] = 0;
        }
      }
    }
  }
}
Avatar billede softspot Forsker
20. november 2008 - 15:53 #3
Det ville måske endda være mere generisk at lade længden af array'et showcat styre hvormange iterationer der skulle udføres, for så skal du bare ændret antallet af elementer i showcat for at forøge eller formindske mængden af iterationer:

var showcat = [0,0,0,0,0,0,0];

function toggleGallery(img_id) {
  for(var i = 0; i < showcat.length; i++) {
    if(img_id == 1) {
      var cat = document.getElementById("gal_img" + (i + 1));
      var txt = document.getElementById("imgtxt" + (i + 1));
      if(txt && cat) {
        if(showcat[i] == 0) {
          cat.style.display = "block";
          txt.style.display = "block";
          showcat[i] = 1;
        }
        else {
          cat.style.display = "none";
          txt.style.display = "none";
          showcat[i] = 0;
        }
      }
    }
  }
}
Avatar billede nc85 Nybegynder
20. november 2008 - 16:09 #4
Det fungerer desværre ikke rigtig helt, den skjuler aldrig billederne igen, den skifter fint imellem text divs, og den viser også det nye billede hvis jeg klikker på fx den skal vise nr 2 billede, men den skjuler aldrig det første igen ?

---------------------------------

/// JAVASCRIPT GALLERY ///
/// Made by Nicky Christensen - npc@dynamicweb.dk / nicky@meet-me.dk ///

var showcat = [0,0,0,0,0,0,0];

function toggleGallery(img_id) {
for(var i = 0; i < 7; i++) {
    if(img_id == 1) {
        var cat = document.getElementById("gal_img" + (i + 1));
        var txt = document.getElementById("imgtxt" + (i + 1));
            if(txt && cat) {
                if(showcat[i] == 0) {
                    cat.style.display = "block";
                    txt.style.display = "block";
                    showcat[i] = 1;
                }
                else {
                    cat.style.display = "none";
                    txt.style.display = "none";
                    showcat[i] = 0;
                }
            }
    } // End if
    if(img_id == 2) {
        var cat = document.getElementById("gal_img" + (i + 1));
        var txt = document.getElementById("imgtxt" + (i + 1));
            if(txt && cat) {
                if(showcat[i] == 0) {
                    cat.style.display = "block";
                    txt.style.display = "block";
                    showcat[i] = 1;
                }
                else {
                    cat.style.display = "none";
                    txt.style.display = "none";
                    showcat[i] = 0;
                }
            }
    } // End if
    if(img_id == 3) {
        var cat = document.getElementById("gal_img" + (i + 1));
        var txt = document.getElementById("imgtxt" + (i + 1));
            if(txt && cat) {
                if(showcat[i] == 0) {
                    cat.style.display = "block";
                    txt.style.display = "block";
                    showcat[i] = 1;
                }
                else {
                    cat.style.display = "none";
                    txt.style.display = "none";
                    showcat[i] = 0;
                }
            }
    } // End if
    } // End for
} // End function
Avatar billede nc85 Nybegynder
20. november 2008 - 16:12 #5
Kunne man evt lave det med jQuery, har inkluderet frameworket på sitet nemlig ?
Avatar billede softspot Forsker
20. november 2008 - 17:39 #6
Nååh, jamen, så skal du bare have skjult alle de andre end det id du er igang med at vise...

var showcat = [0,0,0,0,0,0,0];

function toggleGallery(img_id) {
  for(var i = 0; i < showcat.length; i++) {
    var cat = document.getElementById("gal_img" + (i + 1));
    var txt = document.getElementById("imgtxt" + (i + 1));
    if(txt && cat) {
      if(img_id == i + 1) {
        if(showcat[i] == 0) {
          cat.style.display = "block";
          txt.style.display = "block";
          showcat[i] = 1;
        }
        else {
          cat.style.display = "none";
          txt.style.display = "none";
          showcat[i] = 0;
        }
      }
      else {
        cat.style.display = "none";
        txt.style.display = "none";
      }
    }
  }
}
Avatar billede nc85 Nybegynder
21. november 2008 - 09:11 #7
Det virker, mange tak, smider du et svar?

By thw way, sad og kiggede lige på jQuery, kunne man evt lave det med noget ala: http://www.learningjquery.com/2007/03/accordion-madness ?
Avatar billede softspot Forsker
21. november 2008 - 09:33 #8
Velbekomme :)

Ja, du kan da godt bruge jQuery til at vise og skjule dine lag, hvis du vil have effekterne med. Det er i det mindste en noget lettere måde at gøre det på, end selv at lave det. Jeg har endnu ikke arbejdet meget med jQuery (men jeg regner med at komme til det i nær fremtid), så jeg kan ikke give de vilde guldkorn på den konto. Sitet du henviser til synes dog også at gøre et OK arbejde med at forklare hvordan du skal gøre for at få slide-effekten, så det kan du i princippet klippe derfra...
Avatar billede nc85 Nybegynder
21. november 2008 - 10:50 #9
Alletiders, takker endnu engang :)
Avatar billede softspot Forsker
21. november 2008 - 10:55 #10
Tak for point :)
Avatar billede roenving Novice
22. november 2008 - 17:00 #11
Er det ikke meget lettere at opbevare informationen om, hvad der blev vist hidtil:

var showcat = 1;//Tager udgangspunkt i, at det først viste er nr. 1

function toggleGallery(img_id) {
  i = 1;
  while(cat = document.getElementById("gal_img" + i))//forudsætter at det starter med 1 og alle tal er brugt
    cat.style.display = document.getElementById("imgtxt" + i++).style.display = "none";
  document.getElementById("gal_img" + img_id).style.display = "block";
  document.getElementById("imgtxt" + img_id).style.display = "block";
  showcat = img_id;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester