Avatar billede lsskaarup Nybegynder
09. marts 2012 - 13:24 Der er 29 kommentarer og
1 løsning

Dynamisk ændring af celle bredde, ud fra <div>'s overflow

Når vi nu er i gang med at oprette spørgsmål. Så kunne jeg godt tænke mig at vide, og eventuelt hvordan, om det er muligt at tilpasse en celles bredde dynamisk, alt efter om den div som tabellen ligger i, for scrollbar eller ej?

Min div ser således ud:
<div style="overflow:auto;height:650px;">

Den sidste kolonnes celler, vil jeg så gerne kunne tilpasse bredde på alt efter om div'en har scrollbar eller ej. Det har nemlig meget indflydelse på, hvordan layouttet ser ud.
Avatar billede olebole Juniormester
09. marts 2012 - 13:36 #1
<ole>

<div id="foo" style="overflow:auto;height:650px;">
    <div style="height:800px;width:20px;background:yellow"></div>
</div>

<script type="text/javascript">
var elm = document.getElementById("foo");
if (elm.scrollHeight>elm.clientHeight) {
    alert("Scrollbar")
}
</script>

/mvh
</bole>
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 13:44 #2
Hmm, det forstår jeg ikke meget af. Jeg får i hvert fald intet output fra javascript.

Det skal så siges, at min div indeholder en fuld tabel. Skal den nye div placeres specielt i forhold til denne tabel?
Avatar billede olebole Juniormester
09. marts 2012 - 13:51 #3
Det gule div er bare for at skabe noget højt indhold. Fremgangsmåden virker i alle gængse browsere uanset indholdet.
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 13:52 #4
Jo jo, men burde jeg ikke få et oputpu fra javascript, når jeg nu har noget der løber ud over den første divs størrelse?
Avatar billede olebole Juniormester
09. marts 2012 - 13:54 #5
Så laver du fejl, du ikke fortæller om
Avatar billede olebole Juniormester
09. marts 2012 - 13:55 #6
Prøv denne kode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>

<div id="foo" style="overflow:auto;height:650px;">
    <table>
    <tbody>
    <tr>
        <td style="height:800px">blabla</td>
    </tr>
    </tbody>
    </table>
</div>

<script type="text/javascript">
var elm = document.getElementById("foo");
if (elm.scrollHeight>elm.clientHeight) {
    alert("Scrollbar")
}
</script>

</body>
</html>
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 14:22 #7
Tja, laver da sikkert en fejl, elers burde det vel virke :-)

Tager jeg din testkode, får jeg popupen, men ikke på min egenside.

For at komplicere det endnu, men så er siden bygget sådan op, at der er en index side, som bl.a. inkludere denne side, jeg har problemer med. Begge indeholder javascript.

Kan det have noget med det at gøre? Jeg prøvede godt nok at flytte scriptet op i hovedsiden, men det hjælp heller ikke.
Avatar billede olebole Juniormester
09. marts 2012 - 14:29 #8
Har du slået fejlmeldinger fra? I så fald kan du ikke udvikle  =)

Fra det andet spørgsmål ved jeg, du bruger IE, så gør følgende: Klik på tandhjulet øverst til højre i din browser. Vælg Internetindstillinger -> Avanceret og scrolle ned til lige efter de tre første radio buttons. Her finder du en gruppe med tre check boxes. Sæt flueben i Vis en meddelelse om hver scriptfejl
Avatar billede olebole Juniormester
09. marts 2012 - 14:32 #9
Husk, at en browser læser koden, ligesom du selv gør ... oppefra og ned. Det betyder, at elementer skal være renderet i browseren, før de kan kaldes af JS.

Derfor står scriptet i mit eksempel under det element, der skal kaldes. En anden udvej er at kalde på onload
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 14:34 #10
Aha, den var jeg ikke klar over skulle slås til i IE9. Nu får jeg en fejl om at scrollheight ikke er defineret eller er null
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 14:35 #11
Førnævnte fejl, kommer når scriptet ligger på indexside (hovedsiden), hvis jeg flytter det til selve undersiden, så sker der intet.
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 14:40 #12
Doh, det var en fejl 40, fik sat kode ind et forkert sted på undersiden. Efter det blev rettet får jeg en alert når den løber ud over størrelsen
Avatar billede olebole Juniormester
09. marts 2012 - 14:40 #13
scrollheight staves med stort H
Avatar billede olebole Juniormester
09. marts 2012 - 14:41 #14
Jamen, så virker det jo  =)
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 14:47 #15
Ja, nu skal jeg bare finde ud af, hvordan jeg får defineret cellen korrekt.

Prøvede dette tildels for at fordele "overskudet", men det er vidst ikke rigtigt.

    if (elm.scrollHeight>elm.clientHeight) {
        //alert("Scrollbar")
        var celle = document.getElementById("mappe");
        celle.width = "30px";
        var celle = document.getElementById("intern");
        celle.width = "50px";
    } else {
        var celle = document.getElementById("mappe");
        celle.width = "50px";
        var celle = document.getElementById("intern");
        celle.width = "30px";   
    }
Avatar billede olebole Juniormester
09. marts 2012 - 14:55 #16
celle.style.width = "30px";
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 15:06 #17
Hmm, hvordan får jeg det til at gøre det for alle rækker i tabellen?

Lige nu ændrer den kun den øverste, og det ser forkert ud. Men reelt kan jeg ikke sige, om det er rigtigt eller forkert, fordi den ikke ændre alle de andre celler.
Avatar billede olebole Juniormester
09. marts 2012 - 15:19 #18
Det kan ikke passe. Ændrer du én celle i en kollonne, ændres alle celler i kollonnen tilsvarende
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 15:36 #19
Det ville jeg jo også mere, men du kan ser her hvordan den gør: http://i43.tinypic.com/2wmm3hs.png.
Øverste til højre
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 15:37 #20
Men det er den samme side, som jeg rodder med DOCTYPE på, så måske det kan skyldes det?

Men nu vil jeg hjem ad, ser om jeg ikke kan få tid til at kigger på det hen over weekenden.
Avatar billede olebole Juniormester
09. marts 2012 - 16:00 #21
Jeg har lige prøvet at validere din kode, og det viser sig, den er proppet med fejl - hvoraf nogle er ret alvorlige. Ret dem først, før vi kan gå videre
Avatar billede olebole Juniormester
09. marts 2012 - 16:04 #22
Derudover er det denne celle, du skal ændre:

                            <td bgcolor="#F2F2F2" class="content" style="width: 35px; text-align:center;">
                    <table cellspacing="0" celllpading="0">
                        <tr>
                            <td class="content" valign="top"></td>
                        </tr>
                    </table>
                </td>
                          <td bgcolor="#F2F2F2" class="content" valign="top" align="center" style="width: 50px;">
                                        <a href="file://srv-fil2/DS Spærsalg/Ordre/43700-43799/43714">
                        <img src="/gfx/mappe.gif"/ border="0">
                    </a>
                </td>

- og det er vist ikke den, du har ændret på billedet, vel?
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 19:23 #23
#21 Hvad har du valideret med, for kunne da godt tænke mig at se fejlen og få dem rettet.

#22 Jo den skulle være rigtig nok, det er den allersidste celle, men det kun jo være at det fejler pga. de førnævnte fejl
Avatar billede olebole Juniormester
09. marts 2012 - 21:01 #24
Jeg kopierede din kode ind i W3C's validator.

Når jeg ændrede de 50px i den celle, udvidede resten af kollonnen sig. Jeg ved ikke, hvad det er, der sker
Avatar billede lsskaarup Nybegynder
09. marts 2012 - 21:47 #25
Okay, den kender jeg godt, men kan man helt stole på den?

Jeg mener den burde jo være ok når det er W3C's, men når den kan komme med følgende fejl, så undrer jeg mig lidt.

Line 372, Column 42: there is no attribute "HEIGHT"...v id="left"><table width="160" height="550" border="0" cellspacing="0" cellpad...

Jeg har ændret doctype til
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/1998/REC-html40-19980424/loose.dtd">
Avatar billede olebole Juniormester
10. marts 2012 - 14:20 #26
Ja, det er netop et tegn på dens pålidelighed  =)

Der har aldrig eksisteret en height attribut på et TABLE tag i nogen version af HTML-standarden - så det er lige efter bogen.

Med indførelsen af CSS i slutningen af 90'erne fik vi en valid løsning på det problem, men det har aldrig været 'lovligt' at sætte en height attribut
Avatar billede olebole Juniormester
23. marts 2012 - 13:18 #27
Kom du videre med dette problem?
Avatar billede lsskaarup Nybegynder
23. marts 2012 - 15:57 #28
Naaaj, egentlig ikke, kunne ikke få det til at virke. Nu har jeg lavet en høker løsning, hvor jeg tager højde for scrollbarens bredde, og så gør den sidste kolonne fast det stykker mindre. Der er alligevel ikke rammer på tabellen, så med lidt tilpasning, ser brugerne det aldrig.

Men smid et svar, selvom jeg ikke fik det løst direkte, så har du fremkommet med en god løsning, og det skal du selvfølgelig også have noget for.
Avatar billede olebole Juniormester
23. marts 2012 - 16:11 #29
Ellers tak, jeg samler ikke point. Jeg var bare nysgerrig  =)

Læg selv et svar og accepter det, så tråden lukkes
Avatar billede lsskaarup Nybegynder
24. marts 2012 - 12:25 #30
okay
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