Avatar billede bjs Nybegynder
01. maj 2003 - 01:21 Der er 12 kommentarer og
1 løsning

kald af JavaScript-metode

Jeg har lavet et par metoder til min website som skal kaldes ved at trykke på en knap. Problemet er bare at jeg får denne fejl:
tekst=(document.forms[0].navn.value) er null eller ikke et objekt.

Knappen til at kalde metoderne er placeret inde i et "layer". Hvis jeg flytter koden til knappen ud fra "layer'et" fungerer det hele fint. Hvordan kan jeg kalde metoderne selvom koden er i et "layer"?
Avatar billede grunken Nybegynder
01. maj 2003 - 01:24 #1
window.formnavn.input.navn.value
Avatar billede grunken Nybegynder
01. maj 2003 - 01:24 #2
window.formnavn.inputnavn.value

even
Avatar billede =maddog= Nybegynder
01. maj 2003 - 01:25 #3
må vi se hele tagget og ikke bare handleren?
Avatar billede roenving Novice
01. maj 2003 - 01:32 #4
Umiddelbart vil jeg tro, at grunken har fat i noget af det rigtige ...

En layer er principielt en hel html-side, så document.etEllerAndet har kun fat inden for den layer -- men hvad er der galt i at flytte det ind i den overordnede side -- det skulle være nemmere at behandle de nedarvede ting

hth
jes
Avatar billede bjs Nybegynder
01. maj 2003 - 02:22 #5
Her er hele tagget hvor knappen "køb produkt" sidder:

<div id="Layer2" style="position:absolute; left:424px; top:133px; width:243px; height:262px; z-index:2">
<form action="" method="post" onsubmit="validering_navn(), validering_adresse(), validering_postnummer(), validering_bynavn(), validering_email(), validering_telefon();return false;">
<p align="right"> *navn
<input type="text" name="navn" maxlength="100">
</p>
<p align="right"> *adresse
<input type="text" name="adresse" maxlength="100">
</p>
<p align="right"> *Postnummer
<input type="text" name="postnummer" maxlength="4">
</p>
<p align="right"> *bynavn
<input type="text" name="bynavn" maxlength="100">
</p>
<p align="right"> *e-mail
<input type="text" name="email" maxlength="100">
</p>
<p align="right"> *telefon
<input type="text" name="telefon" maxlength="8">
<input type="submit" value="Køb produkt">
</form>

</div>

Er der nogen som kan gennemskue hvorfor jeg ikke kan kalde metoderne herfra?
Avatar billede olebole Juniormester
01. maj 2003 - 02:49 #6
<ole>

Det kan du også sagtens. Det er kun NS4.X, der opfattede et div's indre som et selvstændigt dokument ... hvad det også var i den browser. Der kunne man faktisk med JavaScript sætte en HTML-fil som src på et div - og på den måde loade en hel side direkte ind i et div (men det er en hel anden snak).

Det er til gengæld en meget uortodoks måde, du kalder dine valideringsfunktioner på. Normalt ville man gøre sådan:

<script type="text/JavaScript">
function valider(f) {
    if (f.a.value=="") {
        alert("Skriv noget i feltet");
        f.a.focus();
        return false;
    }
    if (f.b.value=="") {
        alert("Skriv noget i feltet");
        f.b.focus();
        return false;
    }
    if (f.c.value=="") {
        alert("Skriv noget i feltet");
        f.c.focus();
        return false;
    }
        return true;
}
</script>

<form onsubmit="return valider(this)">
    <input type="text" name="a">
    <input type="text" name="b">
    <input type="text" name="c">
    <button type="submit">SEND</button>
</form>

Læg mærke til, at onsubmit-handleren beder om at få returneret resultatet af valideringsfunktionen.
Returnerer den false, submittes formen ikke ... returneres true submittes den.

Læg ligeledes mærke til, jeg kører validering af alle de formelementer, der skal valideres, i én og samme funktion. Det er noget mere elegant  :)
/mvh
</bole>
Avatar billede olebole Juniormester
01. maj 2003 - 02:50 #7
grunken >> formen ligger som property på dokumentet ... ikke på vinduet:
  document.formnavn.inputnavn.value  ;o)
Avatar billede olebole Juniormester
01. maj 2003 - 02:52 #8
bjs >> I den viste funktion validerer jeg blot på, om der er skrevet noget i felterne. Det kan naturligvis være alle mulige andre ting, der testes på. Det var bare et eksempel  :)
Avatar billede =maddog= Nybegynder
01. maj 2003 - 03:06 #9
du også kalde alle valideringer med boolean AND (&&). Når boolean AND første gang møder en falsk værdi stopper den udtrykket (fordi det vil være falsk uanset) og forsætter eksekveringen af scriptet
altså:
return (validering_navn() && validering_adresse() && validering_postnummer() && validering_bynavn() && validering_email() && validering_telefon());

Den slags vil du komme til at hade hvis du skal lave om i noget (f.x. rækkefølgen, det kan være en validering er afhænging af en anden validering o.s.v.)
OleBole's metode med gennemfald, altså hvor valideringen kun for lov til at "falde igennem" if {} blokken hvis data er i orden, er langt bedre fordi den faktisk er til at vedligeholde.
Avatar billede olebole Juniormester
01. maj 2003 - 03:09 #10
... og det er langt bedre, at valideringen falder igennem, end at koderen gør det  ;o))
Avatar billede =maddog= Nybegynder
01. maj 2003 - 03:13 #11
bestemt. Og jeg er vist lige blevet PRO, fordi jeg har været flittig i denne måned.
Avatar billede olebole Juniormester
01. maj 2003 - 03:14 #12
Tillykke .... og velkommen i klubben  ;o)
Avatar billede bjs Nybegynder
15. august 2007 - 09:13 #13
lukket
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