Avatar billede kongknabe Nybegynder
28. februar 2008 - 23:53 Der er 25 kommentarer

Elementært spørgsmål.

Hejsa.. dette er garanteret fuldstændig elementært men kan ikke lige hitte rede i det.

har et par variabeler der indeholder noget data - f.eks.:

var myData1 = 1;
var myData2 = 2;

Har derudover nogle links, med id henholdsvis "1" og "2", og vil gerne med javascript/jquery gøre så når jeg trykker på et af de links hiver en talet ud fra IDet og smider det efter teksten "myData" så der eksempelvis kommer til at stå "myData1" eller "myData2"...

har forsøgt med følgende linje kode:

$("1").click(function(){
  $("#container").processTemplate(myData+this.id);
});

Men det virker ikke.. og det skal det garanteret heller ikke.. men hvordan skriver jeg det rigtigt?

(Håber det giver mening dette sprøgsmål... er overbevist om at det er ganske elementært og bare mig der ikke har styr nok på hvordan sådan noget virker i Javascript :-)
Avatar billede kongknabe Nybegynder
28. februar 2008 - 23:57 #1
Rsultatet af ovenstående kodestump skulle selvfølgelig gerne ende med at svare til følgende :

$("1").click(function(){
  $("#container").processTemplate(myData1);
});

eller

$("1").click(function(){
  $("#container").processTemplate(myData2);
});
Avatar billede smitten1 Nybegynder
29. februar 2008 - 00:28 #2
tja

function myfunction(element){
    var id = element.getAttribute('id');
    var data = window["myData"+id];
    alert(data);
}

og i onclick: onclick="myfunction(this)"
Avatar billede kongknabe Nybegynder
29. februar 2008 - 01:30 #3
Hmm.. er ikke helt sikker på jeg forstår det du skriver der (ja, er begynder ud i javascript) - men har løst det på anden måde... Mange tak for din hjælp dog.. hvis du vil have point er du meget velkommen :-)
Avatar billede roenving Novice
29. februar 2008 - 01:33 #4
myData1 og -2 i dine eksempler er principielt javascript-variabler og altså ikke en tekst, det skal du gøre det til, prøv f.eks.

$("1").click(function(){
  $("#container").processTemplate("myData"+this.id);
});
Avatar billede roenving Novice
29. februar 2008 - 01:35 #5
PS. En id-attribut må _ikke_ starte med andet end a-z eller _, så sørg for at ændre det, så du ikke får det som ekstra problem, hvis en bruger formaster sig til at bruge en browser, som er udviklet til at følge de rekommendationer omkring brug af ECMA-script som er udsendt af ECMA og W3C !-)
Avatar billede kongknabe Nybegynder
29. februar 2008 - 08:44 #6
Hej Roenving.

Takker for din hjælp men synes ikke jeg kan få det til at virke!? - Den løsning jeg selv er kommet frem til er at smide min data i et array ala sådan her:

var data = new Array();
    data[1] = {...};
        data[2] = {...};

Og så kan jeg så skrive:

$(".myLink").click(function(){
  $("#container").processTemplate(data[this.id]);
});


Var i øvrigt ikke klar over at et ID ikke på starte med andet end a-z eller _!? (Udvikler ellers altid i Safari og dobbelt tjekker i Ff, og har aldrig oplevet problemer med det.. men det vil jeg da lige rette :-))
Avatar billede kongknabe Nybegynder
29. februar 2008 - 08:53 #7
(Tilføjelse: Altså... når jeg er færdig med en hjemmeside tjekker jeg selvfølgelig i så mange browsere som muligt, også IE6/7 på trods af at jeg er Macbruger ;-) - Er stor tilhænger af standarter, men man bliver jo nød til at trækkes med browsere som IE også.. Ville dog mene at jeg er dækket godt ind i forhold til standartiserede browsere ved at udvikle i Safari og Firefox - oder!?)
Avatar billede roenving Novice
29. februar 2008 - 14:23 #8
Se f.eks. http://www.w3.org/TR/html401/types.html#h-6.2 !-)

-- og der er _ ikke med, måske har jeg forvekslet det med DOM-bindings regler ...
Avatar billede kongknabe Nybegynder
29. februar 2008 - 14:52 #9
Arghh... Forstår ikke noget af det de skriver... *pinlig smiley* (jeg er designer, ikke koder ;-p).

Når du taler ID mener du så i forhold til CSS, javascript eller går det ud på et...? (Og har jeg forstået det rigtigt hvis det du siger er at det skal starte med A-Z,a-z og at underscore ikke duer heller?)

Og hvorfor må man ikke det egentlig.. Er det ikke rimelig normalt at man f.eks. i en brugerdatabase giver hver bruger et tal ID - det er da pænt upraktisk hvis man ikke kan bruge dette ID i sin javascript,,, eller skal til at udstyre det med et bogstav prefix ...!?
Avatar billede roenving Novice
29. februar 2008 - 15:17 #10
Læg mærke til at linket _alene_ omhandler hvad der er tilladt i html (og du har vel fundet sektion 6.2, hvor bl.a. id- og name-datatypes omtales !-)

-- de id'er, du bruger i andre sammenhænge har intet med hvad du skriver i html, men kan af praktiske grunde have brug for oversættelser, hvis f.eks. du præsenterer data fra en tabel i en række html-elementer, det kunne så f.eks. være id_98764 for det der kommer fra den record, der har id 98764 !o]
Avatar billede kongknabe Nybegynder
29. februar 2008 - 15:24 #11
Takker for uddybningen - tror jeg er nogenlunde med nu :-) (Forstår ikke hvorfor de skal skrive noget så simpelt så kompliceret :-D)

Men forstår stadig ikke hvorfor.. Synes umiddelbart det virker overflødigt bøvlet.. hvorfor må jeg ikke give et HTML element et tal ID eller NAME, og hvorfor gælder de tikke også klasser så? - ja, jeg er forvirret.. men skal nok gøre som de siger :D
Avatar billede roenving Novice
29. februar 2008 - 15:33 #12
Jeg gætter på, at der er noget historisk blandet ind i, måske at de første html-standarder opererede med forskellige behandling af attribut-værdier, hvis de f.eks. bestod af tal, og så vil 01 som tal behandles på samme måde som 1, mens den som streng skulle behandles som '01' ...

-- absolut ikke forklaringen, men en illustration af, at der kan være nogle problematikker, som ikke altid er helt synlige !-)
Avatar billede kongknabe Nybegynder
29. februar 2008 - 15:53 #13
Det lyder ganske sandsynligt, og det er selvfølgelig også ok... Havde nok bare lige brug for at brokke mig lidt - synes jeg jævnligt man får brug for når man roder med Web :D - Specielt som designer ;)

(Men takker for din hjælp m.m. - omend jeg aldrig fik din javascript til at virke..!? - men fandt som sagt en anden løsning :-))
Avatar billede roenving Novice
29. februar 2008 - 16:05 #14
-- og jeg tror din løsning er bedre end den, der tager direkte afsæt i din egen:

$("#container").processTemplate(eval("myData"+this.id));

-- fordi eval() er en af de tungeste native javascript-funktioner, da den naturnødvendigt må tage højde for ekstremt mange forskellige ting ...

-- iøvrigt har jeg hørt den samme slags kommentarer om jquery, og f.eks. også at den er baseret på principielt ugyldig kode med innerHTML !o]
Avatar billede olebole Juniormester
29. februar 2008 - 16:12 #15
<ole>

Det stammer bl.a. fra ECMA, som er den organisation, som vedligeholder standarden for ECMAScript - der er den overordnede betegnelse for JavaScript, JScript og ActionScript (Flash's scriptsprog).

Her er det også fastslået, at '$' ikke må forekomme i begyndelsen af en identifier (f.eks. et variabel- eller funktionsnavn). Denne regel er aldrig blevet skrevet med over i JavaScript og/eller W3C's ECMA-DOM bindinger - men da begge 'standarder' som udgangspunkt _skal_ overholde standarden for ECMAScript, er '$' altså ikke tilladt på dét sted. 'Dit' funktionsnavn '$' er med andre ord også ulovligt  ;o)

Jeg ved godt, at din $-funktion ikke er dit, men jQuery's påhit. Det er blot én af mange årsager til helt at undgå jQuery ... jQuery bygger på dårlig, gammel, uhensigtsmæssig og invalid kode!  :o|

/mvh
</bole>
Avatar billede olebole Juniormester
29. februar 2008 - 16:17 #16
- og "Det stammer bl.a. fra ECMA" gik på diskussionen om et tal i begyndelsen af en identifier  ;o)
Avatar billede kongknabe Nybegynder
29. februar 2008 - 16:33 #17
roenving: Ja, var også omkring en "eval" løsning, men synes også at kunne huske at have læst at det tit er en uheldig metode :-)

Men der er tydeligvis et eller andet grundlæggende ved javascript jeg ikke helt forstår.. har følgende kode som virker:

$(document).ready(function() {

    $(".click_me").click(function(){
               
        $(".active").removeClass("active");
        $(this).addClass("active");
               
        $("#mailbox_content_container").processTemplate(data[this.id]);
    });

});

Men, hvis jeg så i stedet prøver følgende virker det ikke :-/

$(document).ready(function() {

    $(".click_me").click(function(){
     
          test(this);
    });

});

function test(myObject) {

        $(".active").removeClass("active");
    $(myObject).addClass("active");
               
    $("#mailbox_content_container").processTemplate(data[myObject.id]);
}

Kan ikke lige forstå hvad forskellen er, men den er der jo nok! :D

- Om jQuery i øvrigt disideret er _baseret_ på innerHTML er måske så meget sagt, men de har inkorporeret det :-) (Om det er godt eller skidt vil jeg afholde mig fra at udtale mig om.. er jeg ikke vidende nok til og kender vist jeres mening ;-))

Olebole: Ok.. Har aldrig hørt om ECMA? - kender du til andre Javascript biblioteker du vil anbefale frem for jQuery?

Er der i øvrigt nogen reel fare ved alligevel at bruge jQuery, og dermed '$' i begyndelsen af en identifier, eller er der her mere tale om en akademisk diskussion/teoretisk fare? :-)
Avatar billede olebole Juniormester
29. februar 2008 - 17:04 #18
"jQuery kan ikke virke uden innerHTML" = "jQuery bygger på innerHTML"  ;o)

Der sker ikke som sådan nogen naturkatastrofer ved at bruge jQuery, selvom det består af skodkode. Men bruger du det, er der på den anden side ikke nogen grund til at overholde andre webstandarder eller best-practices. Om du skriver invalid skodkode ét eller hunderede steder på en side er i princippet ligegyldigt.

Nej, jeg er desværre ikke bekendt med et brugbart Ajax-library, der ligger færdigt til download  :o|
Da Ajax jo ikke er en samlet, integreret teknologi - men en teknik, strikket sammen af allerede bestående webteknologier - er teknikken ofte ret kompleks at arbejde med. Den er derfor - efter min bedste overbevisning - slet ikke egnet til at skrive større librararies omkring.
Skal tingene simplificeres på en brugbar måde, vil et ordentligt library blive uforholdsmæssigt stort og meget komplekst ... også for slutkoderen.

Webkodning er ikke pr. definition en 'demokratisk' størrelse, og det står ingen steder skrevet, at al webkode skal være let at sætte sig ind i for alle. Sådan var det blot med de første versioner af HTML - men virkeligheden har siden udviklet sig dramatisk!
Ajax er således kun for de mest 'langhårede' kodere. Det kræver overordentlig god indsigt i HTML, JavaScript, CSS, DOM og ikke mindst de enkelte browseres implementeringer af disse teknologier.
Avatar billede kongknabe Nybegynder
29. februar 2008 - 17:57 #19
---------
"jQuery kan ikke virke uden innerHTML" = "jQuery bygger på innerHTML"  ;o)
---------

Ok, det var jeg ikke klar over.. I stand corrected ;-)

---------
"Nej, jeg er desværre ikke bekendt med et brugbart Ajax-library..."
---------

Nu tænker jeg ikke kun på AJAX - synes jQuery gør en masse almene javascript ting meget lettere og hurtigere, samt fylder nogle huller som f.eks.manglende mulighed i javascript for at skrive  "getElementsByClass"... (Og kan da også se at det er godt nok til f.eks. Google ;-p http://ajaxian.com/archives/google-code-revamps-with-jquery)

Er i øvrigt meget nysgerrig efter at se hvad du har lavet af sider igennem tiden... Nu har jeg jo stødt på dig herinde et par gange, og du lader til at have godt styr på det hele.. Har du nogle links man må se evt.? :-)
Avatar billede kongknabe Nybegynder
29. februar 2008 - 18:00 #20
og mangler i øvrigt stadig en forklaring af hvorfor man bør undgå jQuery som du skriver i dit første indlæg.. naturkatastrofer havde jeg under alle omstændigheder ikke forventet :-D, men hvilke andre katastrofer kan jeg evt. forvente? (Eller hvorfor bør jeg ellers undgå det?)
Avatar billede olebole Juniormester
29. februar 2008 - 18:19 #21
"Godtnok til Google" >> og så? Jeg kan vise dig tonsvis af skodkode på WWW ... det kan da aldrig blive et godt påskud for selv at lave noget møg  :)

jQuery's getElementsByClass er nu ikke en udvidelse af JavaScript, men af W3C's DOM - men det er en detalje. Det tager ikke to halve minutter at skrive den kode selv - men uanset om man bruger sin egen eller jQuery's, er det ikke en særlig effektiv måde at kode på, når man kalder ned i dokumentet for at finde elementer med en bestemt klasse. Er man nødt til det, har man som oftest et strukturproblem.

Alene af den grund, at en af jQuery's grundlæggende funktioner hedder noget ulovligt, bør man undgå dette library. Der kan i morgen komme en version af JavaScript eller JScript, der overholder standarden og dermed umuliggør brug af jQuery.
Hvad angår brugen af innerHTML og dens skadevirkninger:
    http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php
Avatar billede kongknabe Nybegynder
29. februar 2008 - 18:33 #22
Er godt klar over at det ikke nødvendigvis er et kvalitetsstempel at google bruger en bestemt teknologi.. men hånden på hjertet er google jo omvendt heller ikke ligefrem kendt for at lave dårlige skodløsninger!

Takker for linket... Det vil jeg læse :-)

Du har ikke links til andre sider du har lavet? (Er vildt nysgerrig efter at lure din kode ;-) :-D)
29. februar 2008 - 18:51 #23
java script:alert("Sådan virker det da osse!")

Haha xD
Avatar billede olebole Juniormester
01. marts 2008 - 04:31 #24
kongknabe >> Du kan forhåbentlig ret snart købe en bog om Ajax. Der bliver masser at lure  ;o)
Avatar billede kongknabe Nybegynder
01. marts 2008 - 12:59 #25
Skal det forstås sådan at du er i gang med at skrive en bog om AJAX? - I så fald spænende! :-)

(Og har du ikke nogle links du vil smide.. vil meget gerne se hvad du har lavet :-))
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