29. september 2002 - 12:12Der er
30 kommentarer og 1 løsning
showHide2, at vise/skjule layers med noget i deres id
Med stor hjælp fra phoenixv kom min showHide funktion til at virke. Nu er det sådan at jeg gerne vil kunne vise/skjule div's som har noget i deres navn...
til browsere der understøtter DOM2 (ikke vældig mange)
function divDerSlutterMed ( bogstav, synlig ) { // bogstav er slutbogstav. eg "u", "m", ... // synlig er synlighed. eg "visible", "hidden". var liste = document.getElementsByTagName( "div" ); // liste er nu et array med alle dic objekter. for (var i=0; i<liste.length; i++ ) { var lgt = liste[i].id.length; if ( bogstav = liste[i].id.substring(lgt-1) ) { liste[i].style.visibility = synlig; } } }; //end divDerSlutterMed ( String, String )
Jeg er lidt usikker med kaldet: document.getElementsByTagName( "div" ); der står ingen steder at parameteren er ligeglad med om du bruger store eller små bogstaver ("div", "Div", "DIV"), og microsofts domkumentation http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/getelementsbytagname.asp staver den konsekvent med store bogstaver. xhtml siger det skal være med små bogstaver.
prøv. Hvis ikke er det muligt det går bedre hvis du udskifter linien: var liste = document.getElementsByTagName( "div" ); med: var liste = document.body.all.tags("DIV");
men så er du så også helt sikker på det ikke virker andre steder end i IE.
Synes godt om
Slettet bruger
29. september 2002 - 20:15#8
Men getElementsByTagName skulle nu meget gerne virke i IE5.
>phoenixv, kan du ikke lige se med også. Den første showHide funktion du lavede fungerer lidt underligt, det er som om at det er den første funktion showHide9() der styrer det hele ?!?
1) der skal ikke stå 'java script: i en handler 2) du har glemt " efter første parameter. 3) anden parameter malgler helt 4) selve scriptet står ikke i din side.
Problemet er at jeg arbejder lokalt og det var en gl. version jeg havde fået smidt ud. Nu fungerer den faktisk rigtig godt, jeg ville dog meget gerne have at den kunne kontrollere hvorvidt om der er hak/ikke hak i den checkbox. Så jeg forsøgte noget ala: function showHide9() { var divs = document.getElementsByTagName("div"); var vis = document.parent."orm1.chk9.value for (i = 0; i < divs.length; i++) if (divs[i].className == "9"){ if (vis == "1"){ divs[i].style.visibility = "visible"; } else { divs[i].style.visibility = "hidden"; } } }
Men får en fejl: Objektet understøtter ikke denne metode...
Jeg må indrømme at det meste af det er gætteværk ?
der skal stadig ikke stå 'java script:' i handlere. istedetfor onClick="java script:document.layout.showHide9();" skal det blot være onClick="document.layout.showHide9();"
De eneste steder der (nogen gange) skal stå 'java script:' er: i links efter href= i forms efter action= i frames efter src=
du laver klassenavne der hedder: <style type="text/css"> .dna {cursor:crosshair} .9 .12 .16 .tk </style> 'dna' og 'tk' er ok som navne. '9', '12' og '16' er ikke lovlige navne. For at være lovlige skal navne begynde med et bogstav fra alfabetet.
En handler vestår af et nøgleord onchange fulgt af et lighedstegn onchange= fulgt af en streng. og den streng skal være een eneste lovlig streng onchange="streng bogstaver" for at være lovlig skal strengen starte med et anførselstegn, og slutte med samme slags anførselstegn. altså enten onchange="streng bogstaver" eller onchange='streng bogstaver' den slags angørselstegn der bruges til at omkranses strengen må ikke forekomme indeni den streng. hvis de gør tror javascript at strengen ender der. så handleren onChange="document.layout.divDerSlutterMed("u); skal rettes til onChange="document.layout.divDerSlutterMed('u');" og der skal ændres ligesådan der hvor du vil ændre dem der slutter 'm'.
Hej jakoba Tak for tålmodigheden. Nu har jeg opdateret siden på http://bjaergager.dk/ekspert Den funktion som du lavede fungerer fint, dog har jeg ødelagt funktionen showHide9, idet jeg gerne vil have den til at kontrollere om der er hak eller ej i den checkbox som den styres af. Men der er en fejl i det kode som jeg har gættet mig til.
i din hovedside hvor checkboksene står skal der være en <form og </form rundt om dine checkbokse fx: <form name='form1' action="" onsubmit="return false" style="display:inline;"> ... her står alle dine checkbokse </form> den der style="display:inline;" forhindrer form <kommandoen i at generere ekstra linier på siden.
når det er iorden kan du adrressere formen fra din iframe med: parent.document.form1 og checkboksene med parent.document.form1.chk9 parent.document.form1.chk12 ... osv for at teste om en checkboks er sat kikker man på den attribut .checked der er enten true eller false
fidusen med indrykninger er at man kan kikke opad fra enhver sluttuborg, og den første linie hvor der står noget med samme indrykning det er den linie hvor den sluttuborg har sin begyndelse. Gode indrykninger er næsten ligeså vigtigt som at stave rigtigt :-)
function showHide9() { var divs = document.getElementsByTagName("div"); var vis = parent.document.form1.chk9.checked; for (i = 0; i < divs.length; i++) { if (divs[i].className == "s9"){ if (vis){ // hvis vis er true divs[i].style.visibility = "visible"; } // denne } afslutter { forenden af anden if... linie else { // hvis vis er false divs[i].style.visibility = "hidden"; } // denne } afslutter { forenden af else... linien } // denne } afslutter { forenden af første if... linie } // denne } afslutter { forenden af for... linien } // denne } svarer til { for enden af function... linien
:-)) Hej Jakoba Uha så virker det... næsten. Jeg har lavet en linje: window.onload=function(){ showHide9();showHide12();showHide16();showHidetk();divMedBeskaering();divUdenBeskaering();stopclk(); } Som skulle sørge for at alle funktionerne bliver kørt når iframen loader. (der er en sidevælger som sender en UID til den asp side som genererer alle de divs) Men det er kun de 2 funktioner som viser/skjuler dem der slutter med m/u, der kører korrekt. ?
Nu gjorde jeg flg., også for at opdatere hvilke lag der skal/ikke skal vises: function divUdenBeskaering () { // bogstav er slutbogstav. eg "u", "m", ... var liste = document.getElementsByTagName( "div" ); var vis = parent.document.form1.chub.checked; // liste er nu et array med alle dic objekter. for (var i=0; i<liste.length; i++ ) { var lgt = liste[i].id.length; if ( "u" == liste[i].id.substring(lgt-1) ) { if (vis){ liste[i].style.visibility = "visible"; } else{ liste[i].style.visibility = "hidden"; } } } showHide9();showHide12();showHide16();showHideth(); }; //end divDerSlutterMed ( String, String )
Altså til allersidst i funktionen kalder jeg de 4 funktioner som opdaterer de andre lag, sådan at deres visibility rent faktisk hænger sammen med hvad der er valgt.
Nu kan jeg se siden indeni iframen er blevet opdateret. så mangler vi blot den side din iframe ligger i (det er der der skal <form kommando rundt om checkboksene)
i slutningen af funktionerne divUdenBeskaering og divMedBeskaering kalder du showHideth(); men den funktion hedder altså showHidetk(); // 'k' istedet for 'h' tilsidst
done, men der er stadigvæk noget galt. Hvis en bruger har skjult 1/9 (grøn), så kan man ikke skjule Uden beskæring, det må være fordi den også kalder showHide9/12/16/tk() som så checker deres egen status og så tænder for dem igen ! På en eller anden måde skal de checke om de "må" vises for deres "egen" checkbox, sådan at alle class="s9" kontrollerer om checkboxen er checked eller ej. Forstår du ? (uha det bliver mere og mere indviklet)
jeg tror det er sådanher det skal være: (der oprettes 2 nye arrays ca og cb, og ændres i funktionerne)
// fælles array for funktionerne // showHide9 og showHide12 og showHide16 og showHidetk var ca = { u:"chub", m:"chmb" );
function showHide9() { var divs = document.getElementsByTagName("div"); var vis = parent.document.form1.chk9.checked; for (i = 0; i < divs.length; i++) { if (divs[i].className == "s9"){ if (vis && parent.document.form1.elements[ ca[liste[i].id.substring(lgt-1)] ].checked ){ divs[i].style.visibility = "visible"; } // denne } afslutter { forenden af anden if... linie else{ divs[i].style.visibility = "hidden"; } // denne } afslutter { forenden af else... linien } // denne } afslutter { forenden af første if... linie } // denne } afslutter { forenden af for... linien } // denne } svarer til { for enden af function... linien
der er ændret i betingelsen i den indre if. lav den samme ændring i funktionerne showHide12 og showHide16 og showHidetk
// fælles array for funktionerne // divMedBeskaering og divUdenBeskaering var cb = { s9:"chk9", s12:"chk12", s16:"chk16", stk:"chktk" };
function divMedBeskaering () { // bogstav er slutbogstav. eg "u", "m", ... var liste = document.getElementsByTagName( "div" ); var vis = parent.document.form1.chmb.checked; // liste er nu et array med alle dic objekter. for (var i=0; i<liste.length; i++ ) { var lgt = liste[i].id.length; if ( "m" == liste[i].id.substring(lgt-1) ) { if (vis && parent.document.form1.elements[ cb[liste[i].className] ].checked ) { liste[i].style.visibility = "visible"; } else{ liste[i].style.visibility = "hidden"; } } } showHide9();showHide12();showHide16();showHidetk(); }; //end divDerSlutterMed ( String, String )
der er ændret i betingelsen i den indre if. lav den samme ændring i funktionen divUdenBeskaering
Hej Jakob, ja jeg fandt den godt, i de 4 første skal det være divs[i]...
Har også lige testet det på Macintosh, ud over at min iMac er *øvlangsom, så spiller det bare.
Jakob, jeg ville gerne have lov til at sende dig en flamingokasse med indhold osm tak for din hjælp, det har været alletiders. Men udover at du (formentligt) bor i Nivå, så kan jeg ikke finde dig !!
Kan du ikke sende mig din adr. på mail ?
Igen, 1000 tak for hjælpen, det har været alletiders.
hmm, ja det var jo så sandelig så lidt. Er du sikker?, det er en dejlig Chateau La Foret - Cotes de Castillon...
Jo du, jeg syntes nu nok at jeg skylder dig en flaske god rød som tak.!
Mvh Mark
Synes godt om
Ny brugerNybegynder
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.