Avatar billede dennism Nybegynder
12. januar 2005 - 16:56 Der er 8 kommentarer og
1 løsning

JavaScript: variabel i funktion

Jeg har f.eks. denne funktion:

function input_focus(formname, name, value) {

    if (document.eval(formname).eval(name).value == value) {
        document.eval(formname).eval(name).value = "";
    }

}

formname kan f.eks. være "mainform", name "user" og value "find bruger..".

Men når jeg kører funktionen før jeg en fejl. Meningen er, at den skal indsætte formname, name og value så der feks. kommer til at stå:
    if (document.mainform.user.value == "find bruger..") {

Hvad gør jeg galt?
Avatar billede thesurfer Nybegynder
12. januar 2005 - 17:05 #1
Prøv:
if ( eval("document." + formname + "." + name).value )

Eller lav det om til en variabel:

var felt = eval("document." + formname + "." + name);
if (felt.value == value) ....
Avatar billede thesurfer Nybegynder
12. januar 2005 - 17:06 #2
måske er "name" og "value" reserveret.. brug altid et prefix..
Eksempel: myForm, myName, myValue, osv..
Avatar billede moocher Nybegynder
12. januar 2005 - 17:08 #3
function input_focus(form_name, navn, vaerdi) {

    if (document.eval(form_name).eval(navn).value == vaerdi) {
        document.eval(form_name).eval(navn).value = "";
    }

}
Avatar billede dennism Nybegynder
12. januar 2005 - 17:16 #4
thesurfer >>

Smider du et svar?
Avatar billede olebole Juniormester
12. januar 2005 - 17:18 #5
<ole>

Undgå helt brugen af eval. Det er en ekstremt dårligt performende funktion - og den er som oftest overflødig:

function input_focus(form_name, navn, vaerdi) {
    if (document[form_name][navn].value == vaerdi) {
        document[form_name][navn].value = "";
    }

}

/mvh
</bole>
Avatar billede olebole Juniormester
12. januar 2005 - 17:21 #6
Det ligner i øvrigt noget, der kan skrives sådan:

<input ... value="bla"
    onfocus="if(this.value==this.defaultValue)this.value=''"
    onblur="if(this.value=='')this.value=this.defaultValue">
Avatar billede olebole Juniormester
12. januar 2005 - 17:24 #7
Hvis man undrer sig over måden, jeg bruger array-notation på i mit første eksempel, kan jeg - i al beskedenhed - anbefale at læse:
  http://www.eksperten.dk/artikler/227
Avatar billede dennism Nybegynder
12. januar 2005 - 17:29 #8
Tak for dit svar, olebole. Har droppet funktionen og istedet gjort som du skrev!
Smider du lige et svar?
Avatar billede olebole Juniormester
12. januar 2005 - 17:44 #9
Der er ikke principielt noget galt i at bruge eval ... den er bare enormt sløv. Derfor vil jeg gerne dele points  :)

Det med array-notaionen er faktisk ret sjovt ... man kan skrive mange sære ting:
  document["body"]["style"]["color"] = "red";
... f.eks. Måske ikke umiddelbart anvendelig - men denne her kan faktisk være ret smart:

var aStyles = {"color":"blue", "backgroundColor":"red", "padding":"10px"};
var myDiv = document.getElementById("mitDiv");
for (x in aStyles) {
  myDiv.style[x] = aStyles[x];
}

En fiks fremgangsmåde, hvis man f.eks. vil kunne lade en bruger skifte tema - el.lign  :)
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