13. februar 2003 - 15:47Der er
23 kommentarer og 3 løsninger
efter 30 mins send form
jeg er ikke en ørn til javascripting og ved ikke helt hvor jeg skal finde min information henne, men jeg har et relativt simpelt spørgsmål. jeg skal have en side til at sende en form(ligesom når brugeren trykker på send knappen) efter 30 mins. hvordan gøres det lige?
bearhugx>> setTimeout tager en streng der skal evalueres som 1. parameter, ikke et funktionskald og getElementById understøttes ikke af gamle browsere!
bearhugx>> Ikke at jeg ikke selv anvender getElementById ofte, men her er det faktisk nemt at lave det så det understøttes af NN4.X og så kan man jo ligeså godt gøre det :-)
[advarsel - lad vær med at trykke på F5 ved et uheld! - min side opdaterede og jeg mistede alt, hvad jeg havde skrevet :-(( )
Jeg valgte getElementById() primært fordi det er den måde, som W3C, via deres DOM level 1 anbefaling, foreslår at bruge for at få fat i et dokuments elementer... at den så "kun" virker for IE5+ og NS6+ ser jeg ikke som det store problem ... Hvis man gerne vil understøtte ældre browsere, så kan man teste på om browseren evt. understøtter getElementById() (altså DOM 1) ... Og hvis ikke, så kan man foretage sit browserspecifikke krumspring for at få fat i FORM elementet...
At få fat i form-elementet er jo hellerikke essensen i dette spm -- Derimod at bruge setTimeout() --- (og ja - jeg indrømmer at jeg glemte quotes omkring metodenavnet :-)) - Det gik lidt hurtigt...
Det var nu heller ikke for at starte en krig omkring DOM1 support eller ej, blot for at bemærke at det her faktisk er muligt at lave det så det understøttes selv af browsere uden DOM support og så naturligvis for at gøre opmærksom på at 1. parameter skal være en streng!
dex_dexter>> Hvis du anvender getElementById, ja så skal det være formens navn, altså: <head> <script> function myFormSubmit() { document.getElementById("thisIsTheForm").submit(); } </script> </head>
bearhugx>> At bruge onload er bare generelt en god ide idet man sikrer sig at evt. interaktion med elementer er mulig idet man har garanti for at HELE dokumentet er parset og objekter er oprettet i DOM. I dette eksempel kunne man forestille sig at sige:
setTimeout("sendForm();", 1)
og risikere at når det ene millisekund var gået, så ville <form> taggen endnu ikke være parset og scriptet ville fejle. At det så ikke behøves at blive sat deklarativt, men kan blive sat programmatisk som i det følgende er anden sag!
<head> <script> function myFormSubmit() { document.getElementById("thisIsTheForm").submit(); }
function init() { setTimeout("myFormSubmit();", 1800000); }
z42cool >> Jeg er helt enig i dine betragtninger om ikke at bruge document.getElementById til at adressere en form ... men det kræver så også, at du ikke bruger 'id', men 'name' til identifikation af formen :)
bearhugx >> W3C anbefaler i øvrigt ikke nogen steder at adressere forms via id ved submission. Derimod anbefaler man i HTML 4.01 rekommendationen at anvende name til scripting. Bl.a. forms og frames adskiller sig faktisk en anelse fra de fleste andre HTML-elementer ved at have deres egen collection under sidens DOM. /mvh
Tja... min betragtning er så dog, at hvis i forvejen skal bruge id/getElementById() til at få fat i alle andre elementer - hvorfor så ikke også bruge den på en frame (eller omskrevet : tænk generisk, og brug kun specialiserede metoder/fremgangsmåder når det enten ikke er muligt generisk - eller hvis det indvolverer for meget bøvl) - Det er i hvert fald det paradigme, som jeg er blevet skolet (indoktrineret?!? :-) med ifm. programmering...
At man så kan gøre det via z42cools metode er jeg da fuldstændig klar over - og at den virker - ja, det gør den - Det benægter jeg ikke -- Er det smartere mener jeg så kan diskuteres (men er også klar over at det kan diskuteres herfra og til dommedag (hvis man tror på såd'n noget))
OleBole >> at bruge id-attribut i stedet for name-attribut siger jeg ikke hellerikke at W3C direkte opfordrer til - det står ikke sort på hvidt før XHTML1-anbefalingen - men hvis man kigger på hvor HTML har bevæget sig henad, så er det den vej det går : 3 eksempler : 1) Det hedder getElementById() og ikke getElementByName() i DOM 1 2) i HTML4.01 er det kun følgende elementer, som har name-attribut : a, applet, form, frame, iframe, img, og map 3) fra XHTML1.0 er name-attribut formelt deprecated
så kan jeg da godt se, at name-attr bruges i HTML4.01-specifikationen mht. frames og forms - personligt synes jeg, jvr. ovenstående, at man ligesågodt kan "male med samme pensel over hele linien" (og name bliver jo aligevel slagtet i den efterfølgende version af HTML)
Men egenligt, så synes jeg at hele diskutionen burde flyttes et andet sted nu (evt. "Fri Debat")- primært fordi jeg ikke tror dex_dexter får særligt meget mere Added Value til det her spørgsmål, ved at vi mundhugges over, om man skal bruge A eller B
Søren ... det er ikke korrekt, hvad du skriver. Du skal kikke under ECMA-bindings under DOM 1. Det er nemlig denne sammenkobling af script og DOM, der i denne sammenhæng er interessant - noget mange glemmer, men som på mange måder er langt vigtigere end 'buzz-fænomenet' XHTML. Man skal passe på ikke at rode begreberne sammen - og det er fuldstændig legalt (og udmærket kodeskik) at anvende de collections, der ligger i DOM'en.
Skal du f.eks. tilgå i en iframe som HTML-element, kan du godt bruge id. Skal du derimod tilgå den som et window-objekt (f.eks, hvis du vil tilgå dens location-objekt), kan du ikke - men må tilgå den gennem DOM'ens frames-collection. Prøv f.eks:
Så vil du se, du roder lidt rundt i begrebderne. Det er ikke spor 'finere', bedre eller mere korrekt at anvende document.getElementById i ethvert tilfælde ... det er direkte forkert i nogle situationer.
Man skal passe meget på 'buzz-fænomen-fælder' ... dem er der mange af i branchen ;o) /mvh
Og nej ... jeg mener ikke, vi bør ikke diskutere dette under Fri Debat. Emnet hører i dén grad hjemme i denne kategori, da det er front-end kodere, der har disse problemer :) /mvh
hm... i har satme knald på herinde ;) men godt at se at man stadigt kan starte en snak om ting, også selvom jeg ca forstår 3 indlæg alt i alt af det her ;) men takker for hjælpen
bearhugx >> undskyld, har haft lidt travlt :) Det er ikke det samme at tilgå en iframe's src ... du har stadig ikke fat i iframe'en som window-objekt - og har ikke fat i dettes location-objekt. Dets history-property har du jo f.eks. ikke adgang til. Href'en var blot et eksempel :)
Der er mange ting, du ikke kan ved at tilgå elementerne på den måde, du anbefaler ... det er derfor, W3C ikke har deprecated de andre metoder, men bruger en hel del plads på at beskrive dem. Man skal bare læse de rigtige dokumenter fra dem ;o) /mvh
Det har du jo ret i -- jeg trækker min påstand ... Men er der så ikke tale om en egenlig forglemmelse fra W3C's side, når man så fra XHTML og fremefter bevidst kun kører med id... Og man kan da godt sige at XHTML er et modefænomen - Men det er jo den vej, som W3C lægger...
Findes der ikke en metode (udfra DOM level 1/2) hvor man kan tilgå de forskellige collections på "metodekalds"-form - og altså ikke via dot-operator.. (håber du forstår, hvad jeg mener...) det, at refferere noget udfra f.eks. document.frames['ib'] --- tja.. den får mig bare til at tænke på de gamle dage, hvor browserkrigen hærgede... den gang hvor man enten skulle bekende sig til document.all eller document.layer :-)) --- Det gjorde sgu' det hele så besværligt... ..Det er primært derfor at jeg er "fan" af de nye _ens_ standarder for at tilgå ting....
Den dag, hvor man kan skrive en kode _på én måde_ og den så virker i alle generele brugte browsere... Det er den dag, hvor jeg vil være glad... Men det verdensbillede er måske ikke lige rundt om hjørnet....
Men indtil da, så vil jeg da gerne vide hvilke dokumenter, du ville foreslå, jeg kigger igennem...
(jeg tror jeg blander JavaScript-DOM og W3C-DOM sammen... Er de to forskellige DOM'er eller er de bare to sider af samme sag... Jeg er lidt forvirret -- Ole, hjælp mig! :-) /Søren
Der er intet, der tyder på, at 'name' bliver deprecated, men da XHTML stadig er en 'baby' er der ingen grund til at bruge det, med mindre man har en rigtig god grund (f.eks. hvis man skriver XML). At være 'med på moden' er en dårlig grund - men desværre den langt mest udbredte :)
Erstatter du 'name' med 'id' på form-felter er de bare meget pæne på siden ... men ubrugelige til at sende værdier med. Det er jo ikke fedt :)
'id' bruger man til visse ting - 'name' til andre. Det er muligt, det minder dig om 'gamle dage', men det er en fejlfortolkning ;o)
Du kan stadig bruge dot-notation i collections: 'document.frames.ib'.
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.