Avatar billede kongfjong Nybegynder
17. august 2006 - 13:22 Der er 23 kommentarer og
1 løsning

JavaScript - problemer med Firefox - del 2

I går fik jeg hjælp af olebole i kampen om at få lavet en funktion der kan overfører tekst fra et input-felt til et textarea i en formular, så den også virkede i FF. Det kom der en formular-specifik funktion ud af som kun virker på en bestemt formular, med de rigtige navne osv:)

Nu vil jeg skridtet videre og lave en funktion hvor man bruger nogle argumenter, så man kan bruge den på alle formularer der skal have samme funktion. Igen er jeg dog stødt på et problem med FF. Funktionen ser foreløbigt sådan ud:

function insertPicHvemErJeg(billede_id, justering_id, textarea_id)
{
    var billede = document.getElementById(billede_id).value;
    var justering = document.getElementById(justering_id).value;

    /*document.write(billede);
    document.write(justering.value);*/

    if (justering == "right")
    {
        var css_class = "img_right";
    }
    else
    {
        var css_class = "img_left";
    }

    var tekst = ' <img alt="' + billede + '" src="behandlinger/' + billede + '" class="' + css_class + '" />';

    document.getElementById(textarea_id).value += tekst;
}

Den virker som sagt fint i IE, men i FF melder den en fejl der hedder: "justering has no properties"

Hvad kan problemet være?
Avatar billede mclemens Nybegynder
17. august 2006 - 13:30 #1
Er det denne del der giver problemer?

    /*document.write(billede);
    document.write(justering.value);*/

... hvis det er - er problemet måske at du har sagt

    var justering = document.getElementById(justering_id).value;

og ikke

    var justering = document.getElementById(justering_id);

- eller får du

    document.write(document.getElementById(justering_id).value.value);

- ellers så kan jeg kun se en fejl - hvis id ikke er defineret på
et element med justering_id som funktionen bliver kaldt med...
(når det er den fejl den giver ved kald til funktionen)
Avatar billede kongfjong Nybegynder
17. august 2006 - 13:33 #2
formularen ser ud som følger:

<form method="post" name="hvemerjeg" id="hvemerjeg" action="admin_check.php?action=hvemerjeg">
<span class="overskrift">HVEM ER JEG:</span><br />
Tekst:<br />
<textarea cols="50" rows="10" name="tekst" id="tekst"></textarea><br />
<input type="submit" value="Godkend" class="knapper" onclick="return(confirm('Er du sikker på du vil godkende det du har skrevet?'));" /><br />
<input type="text" name="billed_til_tekst" id="billed_til_tekst" />
<select name="billed_justering" id="specialbilled_justering" class="tilbud_behandling">
    <option value="left">Left</option>
    <option value="right">Right</option>
</select><br />
</form>
<button class="knapper" onclick="insertPicHvemErJeg('billed_til_tekst', 'billed_justering', 'tekst')">Inds&aelig;t billed i tekst</button>
Avatar billede mclemens Nybegynder
17. august 2006 - 13:33 #3
Takker :o)
Avatar billede kongfjong Nybegynder
17. august 2006 - 13:33 #4
nja det er ikke den udkommenterede del der giver problemer, problemet er at teksten ikke overføres til textarea'et:)
Avatar billede kongfjong Nybegynder
17. august 2006 - 13:36 #5
Jeg har også forsøgt mig med følgende kode:

var justering = document.getElementById(justering_id);
var justering_tekst = justering.options[justering.selectedIndex].text;
Avatar billede mclemens Nybegynder
17. august 2006 - 13:43 #6
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

function insertPicHvemErJeg(billede_id, justering_id, textarea_id)
{
    var billede = document.getElementById(billede_id).value;
    var justering = document.getElementById(justering_id).value;

    /*document.write(billede);
    document.write(justering.value);*/

    if (justering == "right")
    {
        var css_class = "img_right";
    }
    else
    {
        var css_class = "img_left";
    }

    var tekst = ' <img alt="' + billede + '" src="behandlinger/' + billede + '" class="' + css_class + '" />';

    document.getElementById(textarea_id).value += tekst;
}
</script>

</head><body>
<form method="post" name="hvemerjeg" id="hvemerjeg" action="admin_check.php?action=hvemerjeg">
<span class="overskrift">HVEM ER JEG:</span><br />
Tekst:<br />
<textarea cols="50" rows="10" name="tekst" id="tekst"></textarea><br />
<input type="submit" value="Godkend" class="knapper" onclick="return(confirm('Er du sikker på du vil godkende det du har skrevet?'));" /><br />
<input type="text" name="billed_til_tekst" id="billed_til_tekst" />
<select name="billed_justering" id="specialbilled_justering" class="tilbud_behandling">
    <option value="left">Left</option>
    <option value="right">Right</option>
</select><br />
</form>
<button class="knapper" onclick="insertPicHvemErJeg('billed_til_tekst', 'specialbilled_justering', 'tekst')">Inds&aelig;t billed i tekst</button>
</body></html>
Avatar billede olebole Juniormester
17. august 2006 - 13:45 #7
<ole>

Dit select-element har ID'en 'specialbilled_justering' - men NAME'et 'billed_justering'. Når du bruger document.getElementById, skal du naturligvis kalde med elementets ID:
    onclick="insertPicHvemErJeg('billed_til_tekst', 'specialbilled_justering', 'tekst')"  ;o)

/mvh
</bole>
Avatar billede mclemens Nybegynder
17. august 2006 - 13:46 #8
<button class="knapper" onclick="insertPicHvemErJeg('billed_til_tekst', 'specialbilled_justering', 'tekst')">Inds&aelig;t billed i tekst</button>

^ - Din id på select'en var specialbilled_justering og ikke billed_justering (IE, kender ikke forskel på hoved og hale - sludder name og id)

en lille rettelse jeg vist mangler:

var tekst = ' <img alt="' + billede + '" src="behandlinger/' + billede + " class="' + css_class + '" />';

rettes til:

var tekst = ' <img alt="' + billede + '" src="behandlinger/' + billede + '" class="' + css_class + '" />';
Avatar billede olebole Juniormester
17. august 2006 - 13:46 #9
- og det fik mclemens skrevet, mens jeg skrev  ;D
Avatar billede mclemens Nybegynder
17. august 2006 - 13:47 #10
Update, jeps det var rettelsen :o)
Kast et svar for en deler Ole ...
Avatar billede mclemens Nybegynder
17. august 2006 - 13:47 #11
Hehe, det går godt :D
Avatar billede mclemens Nybegynder
17. august 2006 - 13:48 #12
Hov, update igen x3
tak for point :o)

... Vil du have en bid Ole ?
Avatar billede kongfjong Nybegynder
17. august 2006 - 13:48 #13
Den røg til clemens:)

Han var trods alt først, men tak for hjælpen begge, for hunde jeg skal være mere opmærksom med det skidt.... Men sjovt at IE godt kan hitte ud af det, som om den leder i både 'name' ig 'id' efter det jeg parser som argument...
Avatar billede olebole Juniormester
17. august 2006 - 13:48 #14
*LooL* ellers tak, mclemens. Jeg fik points for 'første del' ... det her må være dine  ;o)
Avatar billede mclemens Nybegynder
17. august 2006 - 13:49 #15
Ok, takker for pointene :o)
Avatar billede olebole Juniormester
17. august 2006 - 13:54 #16
kongfjong >> FF er en udløber af en browser fra et firma, der hed Netscape. I slutningen af 90'erne rasede 'Den Store Browserkrig' mellem Netscape og MS - og den vandt MS bl.a. på våbnet 'tilgivende browser'.

IE forstod/forstår en masse fejlfyldt kode, så kodere, der ikke er helt stive i teorien, fandt IE en skøøøøøn browser - mens Netscape var 'noget lort, der ikke virker' ... på trods af, den blot opførte sig, som standarderne foreskrev.

Derfor kan man i IE adressere et element med 'getElementById', når man angiver elementets name-attribut i stedet for dets id-attribut  ;o)
Avatar billede kongfjong Nybegynder
17. august 2006 - 13:59 #17
Hehe okay, meget 'sød' browser IE:)
Avatar billede kongfjong Nybegynder
17. august 2006 - 14:12 #18
Må jeg smide et hurtigt spørgsmål? Kan man ikke undgå name-attributten og kun benytte id, og stadig få fat i værdierne i PHP når man trykket på submit knappen?

Normalt fanger jeg dem $_POST[name]:)
Avatar billede mclemens Nybegynder
17. august 2006 - 14:20 #19
Ved ikke om det kommer i xforms eller senere, det ved Olebole sikkert,
men når jeg lige tester med en get - så virker det ikke, og tvivler
derfor på at en post virker ...

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

</head><body>
<form method="get" action="#">
<input type="text" name="tester" value="tryk på knappen">
<input type="submit" value="ok med name">
</form>

<form method="get" action="#">
<input type="text" id"tester" value="tryk på knappen">
<input type="submit" value="test med id">
</form>
</body></html>


... men kan du ikke fange elementet med name istedet for id?
Avatar billede kongfjong Nybegynder
17. august 2006 - 14:21 #20
Jo, det kan jeg self sagtens:) Ville bare spare en smule "dobbelt-arbejde" hvis jeg kunne ;)
Avatar billede mclemens Nybegynder
17. august 2006 - 14:41 #21
Det jeg tænkte på var:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

function insertPicHvemErJeg(billede_id, justering_id, textarea_id)
{
    var billede = document.getElementById(billede_id).value;
    var justering = document.getElementsByName(justering_id)[0].value;

    /*document.write(billede);
    document.write(justering.value);*/

    if (justering == "right")
    {
        var css_class = "img_right";
    }
    else
    {
        var css_class = "img_left";
    }

    var tekst = ' <img alt="' + billede + '" src="behandlinger/' + billede + '" class="' + css_class + '" />';

    document.getElementById(textarea_id).value += tekst;
}
</script>

</head><body>
<form method="post" name="hvemerjeg" id="hvemerjeg" action="admin_check.php?action=hvemerjeg">
<span class="overskrift">HVEM ER JEG:</span><br />
Tekst:<br />
<textarea cols="50" rows="10" name="tekst" id="tekst"></textarea><br />
<input type="submit" value="Godkend" class="knapper" onclick="return(confirm('Er du sikker på du vil godkende det du har skrevet?'));" /><br />
<input type="text" name="billed_til_tekst" id="billed_til_tekst" />
<select name="billed_justering" class="tilbud_behandling">
    <option value="left">Left</option>
    <option value="right">Right</option>
</select><br />
</form>
<button class="knapper" onclick="insertPicHvemErJeg('billed_til_tekst', 'billed_justering', 'tekst')">Inds&aelig;t billed i tekst</button>
</body></html>



... men du tænker sikkert på dobbelt arbejde med
styling via id's og input submit via name :o)
Avatar billede olebole Juniormester
17. august 2006 - 14:45 #22
Sålænge vi bruger alm. HTML-forms, er der ingen mulighed for at hente et felt på dets ID - på serveren. Til gengæld kan du kalde alle elementer i dokumentet med det pågældende navn (en name-attribut behøver ikke være unik, som det er tilfældet med ID) således:
    var array_af_felter = document.getElementsByName("et_felt_navn");

Er der kun ét element i dokumentet med dette navn, kan du skrive:
    var felt = document.getElementsByName("et_felt_navn")[0];

Det vil dog altid være hurtigere at hente elemetet direkte med ID'et ... men nu er du i hvert fald orienteret om den anden mulighed  ;o)
Avatar billede olebole Juniormester
17. august 2006 - 14:45 #23
*LooOooL* mclemens bliver vist ved at komme mig i forkøbet  :D
Avatar billede mclemens Nybegynder
17. august 2006 - 17:36 #24
Hehe... jeps :o)

Hmm, næsten ... der var lige en lille "fejl" i min...

var billede = document.getElementById(billede_id).value;
rettes til
var billede = document.getElementsByName(billede_id)[0].value;

og

<textarea cols="50" rows="10" name="tekst" id="tekst"></textarea><br />
rettes til
<textarea cols="50" rows="10" name="tekst"></textarea><br />
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