Avatar billede sansalvador Nybegynder
08. juni 2003 - 20:22 Der er 19 kommentarer og
1 løsning

document.previewpicture.height - tager de "gamle" dimensioner

Hejsa,

Jeg har et større komplekst problem efter min egen mening.

Jeg har en dropdownbox som lister masse billeder, som er plukket ud fra en mappe vha. php.

Der er desuden et billede (previewpicture), som viser det billede, der er valgt i dropdownboxen.

Der er også to input(tekstboxe) som viser højde og bredde på previewpicture! Previewpicture viser altid billedet med billedets standarddimensioner, dvs det ikke er skaleret.

Mit problem er så.. At Når man vælger et billede i dropdownboxen, vises dimensionerne (bredde og højde) på det FORRIGE valget billede. Dvs man er nød til at klikke 2 gange på samme billede (på listen), før man får billedets egentlig dimensioner, og DET er lidt irriterende.

KODE
==============
function indsaetbillede(){
    document.renpiledform.tekst.value = document.renpiledform.tekst.value + '<img src="<? echo $linkdir; ?>' + document.billedform.listbilleder.options.value + '" align="' + document.billedform.selectalign.options.value + '" width="' + document.billedform.width.value + '" height="' + document.billedform.height.value + '">'
}

function changedem() {
    document.previewpicture.width = document.billedform.width.value
    document.previewpicture.height = document.billedform.height.value
}

function aendrbillede() {
    document.previewpicture.src = '<? echo $dir; ?>' + document.billedform.listbilleder.options.value
    document.billedform.width.value = document.previewpicture.width
    document.billedform.height.value = document.previewpicture.height
   
}

<form name=billedform>
<table border=0 width=296 cellspacing=0>
    <tr>
        <td align=left>
            <label>Billeder fra <? echo $dir; ?></label>
        </td>
    </tr>
    <tr>
        <td align=center>
            <!-- HELE SELECTFORMEN GENERERET I PHP -->
            <? echo $selectform_with_optionfiles; ?>
        </td>
    </tr>
</table>     

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">       
    <tr>         
        <td width="25%">         
            <p align="center">Align:
        </td>
        <td width="75%" align=center>
            <select name="selectalign">
                <option value="center">Centrer billede</option>
                <option value="right">Højrecentrer billede</option>
                <option value="left">Venstrecentrer billede</option>
            </select>
        </td>       
    </tr>       
    <tr>         
        <td width="25%">
            Dimensioner:
        </td>         
        <td width="75%" colspan="3">
        Højde:         
        <input type="text" name="height" onkeyup =\"changedem()\" size="3">
        Bredde:         
        <input type="text" name="width" onkeyup=\"changedem()\" size="3">
        </td>       
    </tr>     
</table>     

    <p align="center"><img border="0" name="previewpicture" src="<? echo $dir; ?>kontakt.jpg"></p>
    <p><input type="button" Onclick="indsaetbillede()" value="Indsæt billede" style="float: left"><form>
Avatar billede roenving Novice
08. juni 2003 - 20:28 #1
Uden at se koden, som genereres vil jeg gætte på, at du mangler selectedIndex:

document.billedform.listbilleder.options[document.billedform.listbilleder.selectedIndex].value
Avatar billede sansalvador Nybegynder
08. juni 2003 - 20:32 #2
Okay .. har prøvet at sætte den ind, men kan ikke se hvordan den skulle have noget indflydelse til de dimensioner, der sættes ind i tekstboxerne..

..
Avatar billede roenving Novice
08. juni 2003 - 20:40 #3
-- også her:

function indsaetbillede(){
    document.renpiledform.tekst.value = document.renpiledform.tekst.value + '<img src="<? echo $linkdir; ?>' + document.billedform.listbilleder.options.value + '" align="' + document.billedform.selectalign.options.value + '" width="' + document.billedform.width.value + '" height="' + document.billedform.height.value + '">'
}
Avatar billede roenving Novice
08. juni 2003 - 20:43 #4
Jeg tror den skal se sådan ud !-)

function indsaetbillede(){
    document.renpiledform.tekst.value = document.renpiledform.tekst.value + '<img src="<? echo $linkdir; ?>' + document.billedform.listbilleder.options[document.billedform.listbilleder.selectedIndex].value + '" align="' + document.billedform.selectalign.options[document.billedform.selectalign.selectedIndex].value + '" width="' + document.billedform.width.value + '" height="' + document.billedform.height.value + '">'
}
Avatar billede sansalvador Nybegynder
08. juni 2003 - 22:05 #5
Ah ja, det var selvfølgelig en metode.. MEN! Det løser ikke problemet med at ændre tekstboksene width og height.....
Avatar billede sansalvador Nybegynder
08. juni 2003 - 22:06 #6
Men det er ikke en holdbar metode, da jeg bruger height og width (tekstboksene altså) til at definere height="" og width="" i det færdige billede. Dette skyldesm, at man skal kunne være i stand til at ændre i målene manuelt.
Avatar billede roenving Novice
08. juni 2003 - 23:30 #7
hvis du ikke bruger selectedIndex ved du da overhovedet ikke hvad du henter -- det er da derfor man bruger index ??-)

-- og grunden er den samme som at man bruger vejnumre ...
Avatar billede sansalvador Nybegynder
09. juni 2003 - 00:10 #8
Jeg bruger OnChange="aendrbillede()" på listboksen ... Noget jeg måske lige burde have nævnt =)
Avatar billede roenving Novice
09. juni 2003 - 00:28 #9
document.billedform.selectalign.options.value svarer til at du angiver vejnavnet til en vej, som du ikke ved om er på 2 numre eller 10000

-- jeg er forbavset over, at du ikke får en fejl, for der hvor jeg hidtil har fået lavet den fejl har jeg straks fået en javascript-fejl i hovedet (den lille gule nede i hjørnet !-)

-- at det virker ved to klik kan hænge sammen med, at du serverside får smidt noget rigtigt tilbage -- men det kan jeg ikke gennemskue ...
Avatar billede sansalvador Nybegynder
09. juni 2003 - 13:23 #10
Det er jeg så meget uenig i.

Det hele er javascript (bortset fra filerne der bliver spyttet i den dropdown).
Det undrer mig at du ser på det så skeptisk, da jeg åbenbart har opdaget noget - og jeg ER newb til JS - som I andre ikke kan se ..

document.billedform.selectalign.options.value ER den valgte value i <option>... Det virker 100% her.. Problemet er:

document.previewpicture.src = '<? echo $dir; ?>' + document.billedform.listbilleder.options.value
    document.billedform.width.value = document.previewpicture.width
    document.billedform.height.value = document.previewpicture.height

At få height.value og width.value til at vise dimensioner fra det billede, der bliver aktiveret, og ikke det forrige billede.
Avatar billede sansalvador Nybegynder
09. juni 2003 - 13:36 #11
Og fordi det virker ved to klik, altså klikke på den samme igen i dropdown, giver at det tidligere billede jo er det samme som, det der igen bliver klikket på.

Jeg forstår ikke du ikke forstår =)
Det er ligesom du ikke lige fik den sætning her med:
<select OnChange="aendrbillede()"> .......
Avatar billede roenving Novice
09. juni 2003 - 13:55 #12
-- har du prøvet med ?-)

document.billedform.selectalign.options[document.billedform.selectalign.selectedIndex].value
Avatar billede sansalvador Nybegynder
09. juni 2003 - 14:09 #13
jeg er ikke med nu.. Ja, jeg har prøvet med:

document.billedform.listbilleder.options[document.billedform.listbilleder.selectedIndex].value

Ved ikke lige hvor du får selectalign fra..

Men hvor helt præcist, mener du at jeg skal sætte den ind henne? Bare for at være sikker :)
Avatar billede roenving Novice
09. juni 2003 - 14:47 #14
-- arh ...

-- som du tidligere bemærkede fik jeg ikke din onchange med ,-|

-- fordi jeg ikke kunne bruge din original-kode til noget i min editor/browser pga. php-koderne -- sorry, jeg måtte stave mig igennem html- og javascript-koden for at forstå ...

-- nu tror jeg at jeg har forstået, at det eneste problem er, at dine to width og height bokse ikke opdateres ...

-- prøv at indsætte en alert i aendrbillede:

function aendrbillede() {
    document.previewpicture.src = '<? echo $dir; ?>' + document.billedform.listbilleder.options[document.billedform.listbilleder.selectedIndex].value
alert(document.previewpicture.width)
    document.billedform.width.value = document.previewpicture.width
    document.billedform.height.value = document.previewpicture.height
   
}

-- et forsøg på debugging, det eneste jeg kan komme på som forklaring er, at billedet ikke har 'nået' at få nye dimensioner på det tidspunkt -- og så kan vi afsløre det !-)
Avatar billede sansalvador Nybegynder
09. juni 2003 - 14:51 #15
Jæs .. En lettelse af vi forstår hinanden ;)

Ja .. nu sker der sager.

Når jeg sætter alert(document.previewpicture.width)ind, får jeg nu to alerts: En med width for det tidligere billede, og en med width for det nye billede...
Avatar billede sansalvador Nybegynder
09. juni 2003 - 14:55 #16
Hmm .. Jeg tror det er fordi at

  document.billedform.width.value = document.previewpicture.width
    document.billedform.height.value = document.previewpicture.height

Læses ind INDEN det nye billede er færdigloadet, og derfor tager den width fra det forrige billede. Kan man ikke sætte et delay på, så den venter lidt med at køre 

document.billedform.width.value = document.previewpicture.width
    document.billedform.height.value = document.previewpicture.height

?
Avatar billede sansalvador Nybegynder
09. juni 2003 - 15:03 #17
Hey ..  jeg fandt ud af det:

setTimeout("document.billedform.width.value = document.previewpicture.width", 500);
setTimeout("document.billedform.height.value = document.previewpicture.height", 500);

Bare sætte et delay på 500 ms på, så siden når at loade billedet, så javascript opfanger de rigtige dimensioner...

Vil du have point? Du har trofast fortjent dem :)
Avatar billede roenving Novice
09. juni 2003 - 15:05 #18
Ja -- men det bliver jo stærkt afhængigt af hvor lang tid billedet er om at loade, men du kan jo prøve dig frem -- og få nogen til at teste remote !-)

men f.eks. sådan:

setTimeout("setDimensions()",500)//½ sek.

istedet for og så lave en ny:

function setDimensions(){
document.billedform.width.value = document.previewpicture.width
    document.billedform.height.value = document.previewpicture.height
}

-- jeg ville selv foretrække at lægge det ud i en funktion ... (nåede at se dit sidste indlæg ;O)
Avatar billede sansalvador Nybegynder
09. juni 2003 - 15:06 #19
Ja.. Gør jeg også :)
Tak skal du have .. Nøden var ikke hård at knække.. Det var om at finde nøden ;)
Avatar billede roenving Novice
09. juni 2003 - 15:11 #20
-- en ofte set problemstilling ...

-- og jeg takker for points ;~}
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