/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Aflæse CSS værdi med javascript
Fra : Ukendt


Dato : 10-12-07 12:14

Hej NG,

Det er muligt at sætte en CSS værdi ved for eksempel at benytte:

document.getElementById(IdNr).style.display="block";


Er det muligt at aflæse et elements værdi ?

Min ide er at ændre værdien til block hvis den er none, og til none hvis den
er block !


Venligst
neuhafen



 
 
Birger (10-12-2007)
Kommentar
Fra : Birger


Dato : 10-12-07 12:57

"Neuhafen" <neuhafen sNaBeL-A neuhafen dk> skrev i en meddelelse
news:475d1f90$0$2101$edfadb0f@dtext02.news.tele.dk...
> Hej NG,
>
> Det er muligt at sætte en CSS værdi ved for eksempel at benytte:
>
> document.getElementById(IdNr).style.display="block";
>
>
> Er det muligt at aflæse et elements værdi ?
>
> Min ide er at ændre værdien til block hvis den er none, og til none hvis
> den er block !
>
>
> Venligst
> neuhafen
>

Ja!

Birger
-----
http://bbsorensen.dk



Martin (10-12-2007)
Kommentar
Fra : Martin


Dato : 10-12-07 13:55

Neuhafen wrote:
> Hej NG,
>
> Det er muligt at sætte en CSS værdi ved for eksempel at benytte:
>
> document.getElementById(IdNr).style.display="block";
>
>
> Er det muligt at aflæse et elements værdi ?
>
> Min ide er at ændre værdien til block hvis den er none, og til none hvis den
> er block !

document.getElementById(IdNr).style.display =
(document.getElementById(IdNr).style.display='block' ? 'none' : 'block');

Ukendt (10-12-2007)
Kommentar
Fra : Ukendt


Dato : 10-12-07 14:19


"Martin" <maaNO@SPAMscandesigns.dk> skrev i en meddelelse
news:475d370e$0$90268$14726298@news.sunsite.dk...
> Neuhafen wrote:
>> Hej NG,
>>
>> Det er muligt at sætte en CSS værdi ved for eksempel at benytte:
>>
>> document.getElementById(IdNr).style.display="block";
>>
>>
>> Er det muligt at aflæse et elements værdi ?
>>
>> Min ide er at ændre værdien til block hvis den er none, og til none hvis
>> den er block !
>
> document.getElementById(IdNr).style.display =
> (document.getElementById(IdNr).style.display='block' ? 'none' : 'block');

Tak for svaret...
Den gør ikke helt som jeg havde tænkt, men vil jeg arbejde lidt videre med
den !!!

neuhafen



Kim Ludvigsen (10-12-2007)
Kommentar
Fra : Kim Ludvigsen


Dato : 10-12-07 16:03

Den 10-12-07 12.14 skrev Neuhafen følgende:

> Min ide er at ændre værdien til block hvis den er none, og til none hvis den
> er block !

Jeg benytter følgende:
<script type="text/javascript">
function change(id-navn){
ID = document.getElementById(id-navn);
if(ID.style.display == "")
ID.style.display = "none";
else
ID.style.display = "";
}
</script>

Sammen med linket:
<a onclick="change('id-navn')" href="#">Fold ud/fold sammen</a>

Og indholdet:
<div id="id-navn" style="display:none">
Indhold, der skal foldes ud/sammen.
</div>

--
Mvh. Kim Ludvigsen
Polimiken - en levende netavis, der tør, hvor selv Ekstra Bladet tier.
http://polimiken.dk

Lasse Reichstein Nie~ (10-12-2007)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 10-12-07 17:39

"Neuhafen" <neuhafen sNaBeL-A neuhafen dk> writes:

> Det er muligt at sætte en CSS værdi ved for eksempel at benytte:
>
> document.getElementById(IdNr).style.display="block";

Det svarer til at elementet havde en style-attribut der indeholdt
display:block

> Er det muligt at aflæse et elements værdi ?

Det er muligt at læse værdien i style-attributten (eller sat direkte
på objektet). I nogle browsere er det også muligt at finde ud af hvad
værdi en CSS-egenskab er beregnet til at have ud fra alle de stylesheets
der påvirker siden. Det har du dog nok ikke brug for her.

> Min ide er at ændre værdien til block hvis den er none, og til none hvis den
> er block !

Du kan aflæse style-elementet lige som du sætter det:

var elemStyle = document.getElementById(IdNr).style;
elemStyle.display = (elemStyle.display == "none") ? "block" : "none";

Her skal du passe på hvilken værdi elementet har fra start. Hvis der er
sat noget med en style-attribut direkte på elementet, så virker det fint.

Hvis elementet er synligt fra start, og ikke har "block" sat i
style-attributten, så vil "elemStyle.display" give "undefined"
(fordi den kun aflæser attributten), men så vil det også virke.

Hvis den er skjult via et stylesheet, men ikke via style-attributten,
så byt om på betingelsen:

elemStyle.display = (elemStyle.display == "block") ? "none" : "block";

så vil første skift blive til "block".

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Philip Nunnegaard (10-12-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 10-12-07 18:05

> Hvis elementet er synligt fra start, og ikke har "block" sat i
> style-attributten, så vil "elemStyle.display" give "undefined"
> (fordi den kun aflæser attributten), men så vil det også virke.

Så faldt 10-øren også for mig.
Jeg havde længe undret mig over, om det kunne være rigtigt, at jeg skulle
sætte style-attributten direkte i html-tagget for at få en
vis-skjul-funktion til at virke. Ved at sætte det i css-filen skulle jeg
klikke 2 gange for at få det skjulte frem.

Og det kunne altså åbenbart være rigtigt.


Philip Nunnegaard (10-12-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 10-12-07 18:06

"Philip Nunnegaard" <philip@fjerndettehitsurf.dk> skrev
> Så faldt 10-øren også for mig.

Ovenstående var svar på Lasses indlæg.


Jørgen Farum Jensen (10-12-2007)
Kommentar
Fra : Jørgen Farum Jensen


Dato : 10-12-07 19:34

Philip Nunnegaard skrev:
>> Hvis elementet er synligt fra start, og ikke har "block" sat i
>> style-attributten, så vil "elemStyle.display" give "undefined"
>> (fordi den kun aflæser attributten), men så vil det også virke.
>
> Så faldt 10-øren også for mig.
> Jeg havde længe undret mig over, om det kunne være rigtigt, at jeg
> skulle sætte style-attributten direkte i html-tagget for at få en
> vis-skjul-funktion til at virke. Ved at sætte det i css-filen skulle jeg
> klikke 2 gange for at få det skjulte frem.
>
> Og det kunne altså åbenbart være rigtigt.

Det kan vel også skyldes, at du har fået forbyttet
betingelserne? Eller at du ikke har sat display-egenskaben
for standard-tilstanden i dit stylesheet? Eller
at forsøger at læse elementets egenskaber før
siden er indlæst?

Jf. min lille tutorial
http://webdesign101.dk/javascript/visogskjul.php


--

Med venlig hilsen
Jørgen Farum Jensen
Håndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
..

Philip Nunnegaard (10-12-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 10-12-07 20:49

"Jørgen Farum Jensen" <jfjenzen@yahoo.dk> skrev i meddelelsen
news:475d86b3$0$2092$edfadb0f@dtext02.news.tele.dk...

> Det kan vel også skyldes, at du har fået forbyttet betingelserne? Eller at
> du ikke har sat display-egenskaben
> for standard-tilstanden i dit stylesheet? Eller
> at forsøger at læse elementets egenskaber før
> siden er indlæst?
>
> Jf. min lille tutorial
> http://webdesign101.dk/javascript/visogskjul.php

Det var dog et dejligt stykke simpel kode, du holder dig der.
7 linier mod mine 16.
Det vil jeg straks få implementeret.


Martin (11-12-2007)
Kommentar
Fra : Martin


Dato : 11-12-07 13:07

Philip Nunnegaard wrote:
> "Jørgen Farum Jensen" <jfjenzen@yahoo.dk> skrev i meddelelsen
> news:475d86b3$0$2092$edfadb0f@dtext02.news.tele.dk...
>
>> Det kan vel også skyldes, at du har fået forbyttet betingelserne?
>> Eller at du ikke har sat display-egenskaben
>> for standard-tilstanden i dit stylesheet? Eller
>> at forsøger at læse elementets egenskaber før
>> siden er indlæst?
>>
>> Jf. min lille tutorial
>> http://webdesign101.dk/javascript/visogskjul.php
>
> Det var dog et dejligt stykke simpel kode, du holder dig der.
> 7 linier mod mine 16.
> Det vil jeg straks få implementeret.

og bruger man et framework (såsom prototype, mootools eller andet) så
kan det samme gøres på 1 linje
$('ID').toggle();
og med script.aculo.us så kan det samme opnås, dog med et flot effekt
new Effect.toggle('ID');

Jørgen Farum Jensen (11-12-2007)
Kommentar
Fra : Jørgen Farum Jensen


Dato : 11-12-07 23:29

Martin skrev:

>> Det var dog et dejligt stykke simpel kode, du holder dig der.
>> 7 linier mod mine 16.
>> Det vil jeg straks få implementeret.
>
> og bruger man et framework (såsom prototype, mootools eller andet) så
> kan det samme gøres på 1 linje
> $('ID').toggle();
> og med script.aculo.us så kan det samme opnås, dog med et flot effekt
> new Effect.toggle('ID');

Nu er det i mine øjne ikke så meget en konkurrence om at
gøre koden så kort som mulig men mere om at gøre det
så gennemskueligt som muligt. Jeg kunne jo godt have
skrevet mit eksempel på formen:

function visElement(objekt) {
var blok = document.getElementById(objekt).style;
(blok.visibility == "visible") ?
blok.visibility="hidden" :
blok.visibility="visible";
}

og endda endnu kortere, men det er måske knap så
gennemskueligt for alle læsere i denne gruppe.
(Uden at fornærme nogen, håber jeg

Frameworks er sikkert en glimrende idé, men
som tider skal man nok vælge våben efter
om det er en duel eller en krig, man skal
i gang med.

--

Med venlig hilsen
Jørgen Farum Jensen
Håndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
..

Martin (12-12-2007)
Kommentar
Fra : Martin


Dato : 12-12-07 03:17

Jørgen Farum Jensen wrote:
> Martin skrev:
>
>>> Det var dog et dejligt stykke simpel kode, du holder dig der.
>>> 7 linier mod mine 16.
>>> Det vil jeg straks få implementeret.
>>
>> og bruger man et framework (såsom prototype, mootools eller andet) så
>> kan det samme gøres på 1 linje
>> $('ID').toggle();
>> og med script.aculo.us så kan det samme opnås, dog med et flot effekt
>> new Effect.toggle('ID');
>
> Nu er det i mine øjne ikke så meget en konkurrence om at
> gøre koden så kort som mulig men mere om at gøre det
> så gennemskueligt som muligt. Jeg kunne jo godt have
> skrevet mit eksempel på formen:

Det er skam heller ikke en konkurrence, og håber da heller ikke du tror
det. Jeg kan bare godt lide at åbne øjnene på folk og se at der er
sjovere muligheder - som gør tingene endnu nemmere

>
> function visElement(objekt) {
> var blok = document.getElementById(objekt).style;
> (blok.visibility == "visible") ?
> blok.visibility="hidden" :
> blok.visibility="visible";
> }
>
> og endda endnu kortere, men det er måske knap så
> gennemskueligt for alle læsere i denne gruppe.
> (Uden at fornærme nogen, håber jeg

Selvfølgelig kan man det :)

>
> Frameworks er sikkert en glimrende idé, men
> som tider skal man nok vælge våben efter
> om det er en duel eller en krig, man skal
> i gang med.

Nææ.. men efter jeg fik åbnet øjnene for frameworks (bruger lige PT
jQuery, prototype eller mootools, alt afhængig af hvad jeg vil lave) så
er jeg begyndt at bruge mere og mere javascript til mine sider - og er
næsten snart færdig med et 100% ajax site. Det er blevet meget sjovere
(og nemmere!!) at lege med javascript, da man bliver hurtigt bliver mega
træt af at skrive hele DOM koden for at få fat i elementer og
selvfølgelig en masse andet.

Fx finde alle børne elementerne til en div.
I prototype skrives der bare $('ID').childElements(); kan ikke engang
huske koden hvordan det skrives i "normal" javascript, men erindrer der
skal en hel del linjers kode til.

Desuden så fylder prototype 14kb (hvis det lige bliver pakket) så det er
ihvertfald ikke her det koster noget at bruge et framework.

Birger (12-12-2007)
Kommentar
Fra : Birger


Dato : 12-12-07 05:09

"Martin" <martin@aarhof.eu.invalid> skrev i en meddelelse
news:475f4496$0$90271$14726298@news.sunsite.dk...
8X
> Fx finde alle børne elementerne til en div.
> I prototype skrives der bare $('ID').childElements(); kan ikke engang
> huske koden hvordan det skrives i "normal" javascript, men erindrer der
> skal en hel del linjers kode til.
>
> Desuden så fylder prototype 14kb (hvis det lige bliver pakket) så det er
> ihvertfald ikke her det koster noget at bruge et framework.

document.getElementById( 'ID').childNodes;

14Kb?
Imponerende.

Birger
-----
http://bbsorensen.dk



Stig Johansen (12-12-2007)
Kommentar
Fra : Stig Johansen


Dato : 12-12-07 05:49

Birger wrote:

> 14Kb?

14 KB *pakket* Birger - pakket!

--
Med venlig hilsen
Stig Johansen

Martin (12-12-2007)
Kommentar
Fra : Martin


Dato : 12-12-07 22:05

Stig Johansen wrote:
> Birger wrote:
>
>> 14Kb?
>
> 14 KB *pakket* Birger - pakket!

Nemlig... prototype pakket med Dean Edwards såkaldte "packer"
<http://dean.edwards.name/packer/>

Hvor meget det så yderligere bliver pakket med gzip (som vel næsten alle
browsere bruger til at hente filer efterhånden) vides så ikke :)

Hvis man så vil have ALLE funktioner med i mootools, så fylder det 44kb,
men så har man også alt hvad man skal bruge.
Inkl omkring 100 forskellige effekter, museeffekter, sorteringseffekter,
dragging og alt i ajax json og XHR

Men selvfølgelig, hvis man bare vil lave noget "statisk" javascript, som
ikke kan så meget, så kan det hele jo være ligemeget - eller hellere vil
bruge flash til at lave effekter for den sags skyld.
<http://mootools.net/>

Philip Nunnegaard (12-12-2007)
Kommentar
Fra : Philip Nunnegaard


Dato : 12-12-07 08:00

"Martin" <maaNO@SPAMscandesigns.dk> skrev i meddelelsen
news:475e7cf5$0$90274$14726298@news.sunsite.dk...

> og bruger man et framework (såsom prototype, mootools eller andet) så kan
> det samme gøres på 1 linje

Men så skal man til at sætte sig ind i, hvordan det pågældende framework
virker, og det har jeg rigeligt med problemer med at forstå i en grad, så
jeg er på vej til at lægge Ajax på hylden efter at have fået beklagelser fra
brugere, der oplever, at lortet ikke virker. Det værste er, at jeg i lige
dét tilfælde ikke ser nogen anden udvej end at skrue tiden 10 år tilbage og
genindføre frames (det er en chat).

Jørgens kode virkede ikke bare kort, men også letforståelig.


Birger (12-12-2007)
Kommentar
Fra : Birger


Dato : 12-12-07 13:17

"Philip Nunnegaard" <philip@fjerndettehitsurf.dk> skrev i en meddelelse
news:475f86fc$0$15879$edfadb0f@dtext01.news.tele.dk...
> "Martin" <maaNO@SPAMscandesigns.dk> skrev i meddelelsen
> news:475e7cf5$0$90274$14726298@news.sunsite.dk...
>
>> og bruger man et framework (såsom prototype, mootools eller andet) så kan
>> det samme gøres på 1 linje
>
> Men så skal man til at sætte sig ind i, hvordan det pågældende framework
> virker, og det har jeg rigeligt med problemer med at forstå i en grad, så
> jeg er på vej til at lægge Ajax på hylden efter at have fået beklagelser
> fra brugere, der oplever, at lortet ikke virker. Det værste er, at jeg i
> lige dét tilfælde ikke ser nogen anden udvej end at skrue tiden 10 år
> tilbage og genindføre frames (det er en chat).
>
> Jørgens kode virkede ikke bare kort, men også letforståelig.


Framework og andet gejl, er ikke nødvendigt, for at bruge AJAX.

Med ca. 30 liniers kode, kan du skrive dit eget "framework" til at bruge
AJAX.
Og det er ikke svært at sætte sig ind i.

På den ene side, virker bedre at spørge om nogen kan finde fejl, end at
beklage sig over at det ikke virker.
På den anden, er der ikke mange andre end de der har produceret det
"framework" du bruger, der har lyst til at spilde tid med at finde fejl i
det.
Hvis det er "noget lort" er det ikke AJAX der er noget galt med, men det
udenom.
Og det kan der gøres noget ved...


Birger
-----
http://bbsorensen.dk
http://bbsorensen.dk/?men=Software/AJAX - under udarbejdelse



Martin (12-12-2007)
Kommentar
Fra : Martin


Dato : 12-12-07 22:35

Birger wrote:
> Framework og andet gejl, er ikke nødvendigt, for at bruge AJAX.

Nej da, men imho så er det nu rarest at bruge noget som er gennemtestet

>
> Med ca. 30 liniers kode, kan du skrive dit eget "framework" til at bruge
> AJAX.
> Og det er ikke svært at sætte sig ind i.

Næææ, men det tager heller ikke mig specielt langtid at sætte noget
gummi på en fælg, men gider jeg det... Egentlig ikke, så vil jeg hellere
bruge nogle som er gennemtestet og som jeg ved kan stå fast i sneen :)

Kort sagt, hvorfor opfinde noget som allerede eksisterer?

> På den ene side, virker bedre at spørge om nogen kan finde fejl, end at
> beklage sig over at det ikke virker.

Enig!

> På den anden, er der ikke mange andre end de der har produceret det
> "framework" du bruger, der har lyst til at spilde tid med at finde fejl i
> det.

Tjooo, hvis ikke det var for brugerene bagved de forskellige frameworks,
så havde det nok aldrig været blevet udgivet (og opdateret).
Det er dog sjældent jeg bare kigger på et framework før der udgivet
mindst 2-3 opdateringer (til professionelt brug selvfølgelig) i mine
egne projekter, så kan jeg sagtens finde på at bruge et nyere framework,
også måske hjælpe programmøren bagved med at finde forskellige bugs
(også selvfølgelig skrive til programmøren, istedet for bare at smide
lortet ud!)

> Hvis det er "noget lort" er det ikke AJAX der er noget galt med, men det
> udenom.
> Og det kan der gøres noget ved...

I de 3 primære frameworks jeg bruger (script.aculo.us (til grafisk sjov)
mootools og prototype) har jeg altid kunne vende tilbage til noget af
min egen kode, og har altid kunne finde fejlen der, grunden er vel nok
jeg ikke er speciel hurra til javascript, men jeg bliver da bedre og
bedre til det... (Tror jeg da selv) - men stadig langtfra ligeså god som
programmørerne bag de 3 frameworks :)

Martin (12-12-2007)
Kommentar
Fra : Martin


Dato : 12-12-07 22:26

Philip Nunnegaard wrote:
> "Martin" <maaNO@SPAMscandesigns.dk> skrev i meddelelsen
> news:475e7cf5$0$90274$14726298@news.sunsite.dk...
>
>> og bruger man et framework (såsom prototype, mootools eller andet) så
>> kan det samme gøres på 1 linje
>
> Men så skal man til at sætte sig ind i, hvordan det pågældende framework
> virker,

Enig.. meeeen man skal jo også sætte sig ind i ALT andet hvordan det nu
fungerer...
Hvis man bruger frameworks, så er det altid en god idé at søge efter et
såkaldt cheatsheet, som er en hurtig oversigt over alle de forskellige
funktioner - Fx ser cheatsheetet til prototype sådan her ud
<http://snook.ca/files/prototype_1.5.0_snookca.pdf>
PS. så gælder cheatsheets stortset alle frameworks, indenfor mange
forskellige sprog, og altså ikke kun javascript.

og det har jeg rigeligt med problemer med at forstå i en grad,
> så jeg er på vej til at lægge Ajax på hylden efter at have fået
> beklagelser fra brugere, der oplever, at lortet ikke virker. Det værste
> er, at jeg i lige dét tilfælde ikke ser nogen anden udvej end at skrue
> tiden 10 år tilbage og genindføre frames (det er en chat).

Så find en som måske kan finde fejlen, istedet for bare at smide lortet
ud - det er så surt at have brugt tid på noget, som måske lige mangler
det sidste :)
Lige præcis chat er faktisk ret nemt at lave. (lige et hurtigt eksempel,
uden nogle form for test)

<script type="text/javascript">
function doChat() {
new Ajax.PeriodicalUpdater('chat', 'url_til_serverside', {
method: 'get',
insertion: Insertion.Top,
frequency: 1,
decay: 2
});
}

function doInsert() {
new Ajax.Request('url_til_serverside', {
method:'get',
parameters: { text: $F('text') }
onFailure: function(){ alert('Fejl ...') }
});
}
</script>

<div id="chat">
/* selve chatten */
</div>
<form .. onsubmit="doInsert()">
<input type="text" name="text" id="text" />
</form>

Den søde ajax funktion som hedder PeriodicalUpdater er så smart at den
kalder sig konstant - eller dvs at frequency betyder den skal køre
funktionen hvert sekund, dog hvis der ikke er noget nyt i
PeriodicalUpdater så ganger den frequency med decay, så dvs at hvis der
ikke er sket noget i 1 sekund, så henter den kun noget hvert 2. sekund,
og hvis der ikke er sket noget der, så henter den så hvert 4. sekund osv
osv.

Forresten så er $F('ID') bare en forkortelse af
document.getElementById('ID').value

Lidt mere omkring prototypes ajax funktioner
<http://www.prototypejs.org/learn/introduction-to-ajax>

> Jørgens kode virkede ikke bare kort, men også letforståelig.

Det er den da... helt sikkert, men javascript er skam slet ikke
kompliceret, hvis man selvfølgelig lige bruger lidt tid til at sætte sig
ind i det.

new Ajax.Request('url_til_serverside', {
method:'get',
parameters: { text: $F('text') }
onFailure: function(){ alert('Fejl ...') }
});

Hvis man ved bare en lille smule om hvordan HTTP protokollen fungerer,
så ved man også hvad både method og parameters betyder - onFailure siger
næsten sig selv :)

Birger (12-12-2007)
Kommentar
Fra : Birger


Dato : 12-12-07 23:54

"Martin" <martin@aarhof.eu.invalid> skrev i en meddelelse
news:476051f4$0$90266$14726298@news.sunsite.dk...
> Philip Nunnegaard wrote:
>> "Martin" <maaNO@SPAMscandesigns.dk> skrev i meddelelsen
>> news:475e7cf5$0$90274$14726298@news.sunsite.dk...
>>
>>> og bruger man et framework (såsom prototype, mootools eller andet) så
>>> kan det samme gøres på 1 linje
>>
>> Men så skal man til at sætte sig ind i, hvordan det pågældende framework
>> virker,
>
> Enig.. meeeen man skal jo også sætte sig ind i ALT andet hvordan det nu
> fungerer...
> Hvis man bruger frameworks, så er det altid en god idé at søge efter et
> såkaldt cheatsheet, som er en hurtig oversigt over alle de forskellige
> funktioner - Fx ser cheatsheetet til prototype sådan her ud
> <http://snook.ca/files/prototype_1.5.0_snookca.pdf>
> PS. så gælder cheatsheets stortset alle frameworks, indenfor mange
> forskellige sprog, og altså ikke kun javascript.
>
> og det har jeg rigeligt med problemer med at forstå i en grad,
>> så jeg er på vej til at lægge Ajax på hylden efter at have fået
>> beklagelser fra brugere, der oplever, at lortet ikke virker. Det værste
>> er, at jeg i lige dét tilfælde ikke ser nogen anden udvej end at skrue
>> tiden 10 år tilbage og genindføre frames (det er en chat).
>
> Så find en som måske kan finde fejlen, istedet for bare at smide lortet
> ud - det er så surt at have brugt tid på noget, som måske lige mangler det
> sidste :)
> Lige præcis chat er faktisk ret nemt at lave. (lige et hurtigt eksempel,
> uden nogle form for test)
>
> <script type="text/javascript">
> function doChat() {
> new Ajax.PeriodicalUpdater('chat', 'url_til_serverside', {
> method: 'get',
> insertion: Insertion.Top,
> frequency: 1,
> decay: 2
> });
> }
>
> function doInsert() {
> new Ajax.Request('url_til_serverside', {
> method:'get',
> parameters: { text: $F('text') }
> onFailure: function(){ alert('Fejl ...') }
> });
> }
> </script>
>
> <div id="chat">
> /* selve chatten */
> </div>
> <form .. onsubmit="doInsert()">
> <input type="text" name="text" id="text" />
> </form>
>
> Den søde ajax funktion som hedder PeriodicalUpdater er så smart at den
> kalder sig konstant - eller dvs at frequency betyder den skal køre
> funktionen hvert sekund, dog hvis der ikke er noget nyt i
> PeriodicalUpdater så ganger den frequency med decay, så dvs at hvis der
> ikke er sket noget i 1 sekund, så henter den kun noget hvert 2. sekund, og
> hvis der ikke er sket noget der, så henter den så hvert 4. sekund osv osv.
>
> Forresten så er $F('ID') bare en forkortelse af
> document.getElementById('ID').value
>
> Lidt mere omkring prototypes ajax funktioner
> <http://www.prototypejs.org/learn/introduction-to-ajax>
>
>> Jørgens kode virkede ikke bare kort, men også letforståelig.
>
> Det er den da... helt sikkert, men javascript er skam slet ikke
> kompliceret, hvis man selvfølgelig lige bruger lidt tid til at sætte sig
> ind i det.
>
> new Ajax.Request('url_til_serverside', {
> method:'get',
> parameters: { text: $F('text') }
> onFailure: function(){ alert('Fejl ...') }
> });
>
> Hvis man ved bare en lille smule om hvordan HTTP protokollen fungerer, så
> ved man også hvad både method og parameters betyder - onFailure siger
> næsten sig selv :)


Du greb vist ikke lige ironien der, Martin ;>)

Lag på lag på lag.
Det går jo fint, så længe vi kører på dyre maskiner, der har masser af RAM
og resourcer til rådighed.

De script der styrer min side, fylder lidt over 20Kb, sidst jeg talte dem
sammen.
Og det er _ikke_ komprimeret - heller ikke optimeret.
Menuer, AJAX, dias-styring, textarea editor, brugerregistrering, dagbog,
blog etc. etc.etc.
Hvorfor skulle jeg lægge dobbelt så meget til, for at have et lag ekstra, og
kunne skrive tingene på en fancy måde, så de færreste andre kan forstå hvad
der forgår?

> new Ajax.Request('url_til_serverside', {
> method:'get',
> parameters: { text: $F('text') }
> onFailure: function(){ alert('Fejl ...') }
> });

function DoAjax( prg, param) {
Ajax = new XMLHttpRequest;
Ajax.open( 'post', prg, false);
Ajax.onreadystatechange = AjaxDone;
Ajax.send( param);
}

Du sparer een linie - og har 14Kb ekstra?


Birger
-----
http://bbsorensen.dk



Martin (13-12-2007)
Kommentar
Fra : Martin


Dato : 13-12-07 01:50

Birger wrote:
> Du greb vist ikke lige ironien der, Martin ;>)

Tror jeg ikke... Alt det juleræs stiger mig sku til hovedet hehe.

>
> Lag på lag på lag.
> Det går jo fint, så længe vi kører på dyre maskiner, der har masser af RAM
> og resourcer til rådighed.

Jeg tror næppe det tal falder i vores menneskealder, og enig - alt hvad
jeg laver er ikke optimeret til 28.8 modemmer :)

>
> De script der styrer min side, fylder lidt over 20Kb, sidst jeg talte dem
> sammen.

Jeg har lige talt mine sammen... 219Kb (heller ikke komprimeret)
<http://aarhof.eu/newsgroup/clientside/rss_reader/>
Nej det er ikke færdigt, og virker ikke i IE da jeg ikke lige har lavet
min egen javascript kode god nok til også at understøtte den der
mærkelige browser hehe - og desuden er det også noget til migselv, og
jeg åbner aldrig IE - så derfor bliver det sikkert heller aldrig
optimeret til IE

> Og det er _ikke_ komprimeret - heller ikke optimeret.
> Menuer, AJAX, dias-styring, textarea editor, brugerregistrering, dagbog,
> blog etc. etc.etc.

Kan du ikke kaste et link?

> Hvorfor skulle jeg lægge dobbelt så meget til, for at have et lag ekstra, og
> kunne skrive tingene på en fancy måde, så de færreste andre kan forstå hvad
> der forgår?

For at netop få en masse af de dejlige "Web 2.0" effekter, og få fat i
nogle ting som bare kan kopieres fra side til side, helt uden at lave
ændre i core filerne (det er netop HER at frameworks har sin styrke)

>
>> new Ajax.Request('url_til_serverside', {
>> method:'get',
>> parameters: { text: $F('text') }
>> onFailure: function(){ alert('Fejl ...') }
>> });
>
> function DoAjax( prg, param) {
> Ajax = new XMLHttpRequest;
> Ajax.open( 'post', prg, false);
> Ajax.onreadystatechange = AjaxDone;
> Ajax.send( param);
> }

Virker så ikke i alle browsere... :P
Desuden så mangler du også lige at skrive din AjaxDone funktion, som
netop styrer hvad der sker på de forskellige states.

new Ajax.Request('url_til_serverside', {
method:'get',
parameters: { text: $F('text') },
onLoading: function() {
$('ID').innerHTML = 'Jeg loader nu';
new Effect.Highlight('ID');
},
onComplete: function() {
$('ID').innerHTML = 'Nu er jeg færdig!';
new Effect.Highlight('ID',{startcolor:#ffffff, endcolor:#000000,
duration: 3});
},
onFailure: function(t){
$('ID').innerHTML = 'I made a boo boo :(<br />'+t.responseText';
new Effect.Highlight('ID');
}
});

Bare lige for også at smide lidt Web 2.0 effekter ind på de forskellige
states

> Du sparer een linie - og har 14Kb ekstra?

Tjaa.. men nu bruger jeg også en HEL del mere end bare AJAX objektet i
prototype - Fx. er funktionen toggle også dejlig.

$('ID').toggle();
Skal omskrives til
document.getElementById('ID').style.display =
(document.getElementById('ID').style.display=='none' ? 'block' : 'none');

Desuden så er removeClassName addClassName og HasClassName også dejlige
funktioner.

Anyway - så skal jeg selvfølgelig ikke sige at alle *skal* bruge et
framework - for det gider jeg ikke :) - men til folk der sidder og laver
sådanne ting hver eneste dag (både fritid og professionelt) så ved jeg
at frameworks gør livet meget meget nemmere

Birger (13-12-2007)
Kommentar
Fra : Birger


Dato : 13-12-07 09:27

"Martin" <martin@aarhof.eu.invalid> skrev i en meddelelse
news:476081ba$0$90269$14726298@news.sunsite.dk...
> Birger wrote:
>> Du greb vist ikke lige ironien der, Martin ;>)
>
> Tror jeg ikke... Alt det juleræs stiger mig sku til hovedet hehe.
>

>
> Anyway - så skal jeg selvfølgelig ikke sige at alle *skal* bruge et
> framework - for det gider jeg ikke :) - men til folk der sidder og laver
> sådanne ting hver eneste dag (både fritid og professionelt) så ved jeg at
> frameworks gør livet meget meget nemmere


Der skulle være et link til min side i signaturen ;>)
Sidder i disse dage og skriver her:
Dele af det er noget rod, men det skulle gerne ende med at være interessant:
http://bbsorensen.dk/?men=Software/AJAX

For en mand med en ny hammer kommer alt til at ligne søm!


Birger
-----
http://bbsorensen.dk
Det jeg savner mest af det jeg har glemt er min hukommelse.



Stig Johansen (14-12-2007)
Kommentar
Fra : Stig Johansen


Dato : 14-12-07 07:39

Birger wrote:

> For en mand med en ny hammer kommer alt til at ligne søm!

Hmm. måske, men min gamle tømrernabo siger altid:
'Det er bedre at sømme en skrue i en at skrue et søm i'.

--
Med venlig hilsen
Stig Johansen

Martin (15-12-2007)
Kommentar
Fra : Martin


Dato : 15-12-07 02:16

Birger wrote:
>> new Ajax.Request('url_til_serverside', {
>> method:'get',
>> parameters: { text: $F('text') }
>> onFailure: function(){ alert('Fejl ...') }
>> });

Bare lige for sjov skyld så sammenlignede jeg lige dit og mit opkald
På din egen side (AJAX > Software > Teknik) skriver du.

function MakeAjax() {
try { oReq = new XMLHttpRequest(); } //
Mozilla, Safari, IE7...
catch(e) {
try { oReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); } // ældre IE
catch(e) {
try { oReq = new ActiveXObject("Microsoft.XMLHTTP"); } //
Andre - sidste desperate forsøg...
catch(e) { oReq = null; }
}
}
if ( oReq == null) { alert( 'Din browser kan ikke AJAXe'); }
return oReq;
}


var AjaxObj = null;
function DoAjax( prg, data) {
AjaxObj = MakeAjax();
if ( AjaxObj != null) {
AjaxObj.open( 'post', prg, true);
AjaxObj.setRequestHeader( 'Content-Type',
'application/x-www-form-urlencoded');
AjaxObj.onreadystatechange = AjaxDone;
AjaxObj.send( data);
}
}


function AjaxDone() {
if ( AjaxObj.readyState == 4) {
if ( AjaxObj.status == 200) {
// Her indsættes kode der behandler de returnerede data
}
else {
alert( 'AJAX fejl:\n'+'Status: '+AjaxObj.status+'\nBeskr:
'+AjaxObj.statusText);
}
}
}

> Du sparer een linie - og har 14Kb ekstra?

Hmmm een linje?
Tjaa... :)

Stig Johansen (15-12-2007)
Kommentar
Fra : Stig Johansen


Dato : 15-12-07 05:07

Martin wrote:

> Bare lige for sjov skyld så sammenlignede jeg lige dit og mit opkald
> På din egen side (AJAX > Software > Teknik) skriver du.

Bare for sjovs skyld sidder jeg og tænker på hvor meget tid Birger har
sparet ved ikke at skulle fejlsøge i skodprogrammering.

Og jo - din 'prototype' er skod, for ellers ville den være i stand til at
*håndtere* fejl i stedet for at *gå*ned*.

--
Med venlig hilsen
Stig Johansen

Stig Johansen (13-12-2007)
Kommentar
Fra : Stig Johansen


Dato : 13-12-07 07:20

Philip Nunnegaard wrote:

> Men så skal man til at sætte sig ind i, hvordan det pågældende framework
> virker, og det har jeg rigeligt med problemer med at forstå i en grad, så
> jeg er på vej til at lægge Ajax på hylden efter at have fået beklagelser
> fra brugere, der oplever, at lortet ikke virker. Det værste er, at jeg i
> lige dét tilfælde ikke ser nogen anden udvej end at skrue tiden 10 år
> tilbage og genindføre frames (det er en chat).
>
> Jørgens kode virkede ikke bare kort, men også letforståelig.

Vent lige med at skrue tiden tilbage Philip.
Du skal være opmærksom på, at der kan være et problem med en given
'browser'.

Ja, det er selvfølgelig IE vi taler om. Jeg tror det var med indførslen af
IE6, at 'han' indførte en indstilling, der gør at sider tjekkes efter
'hans' behag, og ikke i forholde til modified dato fra serveren.

Når du bruger Ajax, bruger 'du' de samme indstillinger som IE.
Hvis dine brugere oplever at 'siderne' ikke bliver opdateret, er det højst
sandsynligt pga. denne indstilling.

Man kan ikke sætte indstillingerne i JS, så løsningen er at tilføje en
'dummy variabel', så denne her IE 'tror' det er en ny URL.

Jeg mener ikke det er så lang tid siden vi havde problemet oppe og vende her
i gruppen.

Inden du skrotter for meget, så prøv lige at undersøge ved dine brugere om
det er der skoen trykker, fordi så er løsningen meget nem.

--
Med venlig hilsen
Stig Johansen

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste