Avatar billede tdafoobar Nybegynder
20. november 2006 - 21:01 Der er 4 kommentarer og
1 løsning

Closures problem med refference argument, istedet for copy.

Hejsa

Jeg har et problem, med at når jeg angiver en onclick function via. closures, så bruger javascript en refference, og ikke værdien af det argument jeg sender som parameter.

Koden er som følger

var buttons = [['bold','bold-button','Bold']
              ,['italic','italic-button','Italic']
              ,['underline','underline-button','Underline']
              ,['strikethrough','strike-button','Strikethrough']
              ,['superscript','super-button','Superscript']
              ,['subscript','sub-button','Subscript']
              ,['justifyleft','justify-left-button','Justify left']
              ,['justifycenter','justify-center-button','Justify center']
              ,['justifyright','justify-right-button','Justify right']
              ,['justifyfull','justify-full-button','Justify full']
              ,['inserthorizontalrule','hr-button','Horisontal ruler']
              ,['insertorderedlist','ordered-list-button','Ordered list']
              ,['insertunorderedlist','unordered-list-button','Unordered list']
              ,['outdent','outdent-button','Outdent']
              ,['indent','indent-button','Indent']]
var button;
for(var i=0;i<buttons.length;i++) {
    button = lowerToolbar.appendChild(document.createElement('a'));
    button.className = buttons[i][1];
    button.title    = buttons[i][2]
    button.onclick  = function() { rte.rteCommand(buttons[i][0]); }
}

Selve problemet ligger i dette her stykke:

    button.onclick  = function() { rte.rteCommand(buttons[i][0]);

da det viser sig at JS forsøger at kalde rteCommand med buttons[i][0] som argument når onclick bliver triggered, istedet for værdien af buttons[i][0] (f.eks. 'bold').

Nogen ide til hvordan dette kan løses ?
Avatar billede psykochicken Nybegynder
20. november 2006 - 22:40 #1
buttons[i][0] er heller ikke defineret i onclick-funktionen. Prøv noget i stil med:

for(var i=0;i<buttons.length;i++) {
    button = lowerToolbar.appendChild(document.createElement('a'));
    button.id = buttons[i][0];
    button.className = buttons[i][1];
    button.title    = buttons[i][2]
    button.onclick  = function() { rte.rteCommand(this.id); }
}

/psc
Avatar billede tdafoobar Nybegynder
21. november 2006 - 20:32 #2
jeps, samme hack som jeg fik tildelt på EFnet.

Sitepoint havde et andet foreslag, http://www.sitepoint.com/forums/showthread.php?t=439253

Men drop et svar for points.
Avatar billede tdafoobar Nybegynder
21. november 2006 - 20:33 #3
http://dragons-lair.org/projects/rte/
http://dragons-lair.org/projects/rte/TODO.txt

hvis nogen ville se projektet i aktion (og læse hvor mange IE bugs der er i TODO.txt)
Avatar billede psykochicken Nybegynder
21. november 2006 - 21:18 #4
Tak for tilbuddet, men hvis du fandt et brugbart svar andetsteds, så behold bare pointene til en anden god gang ;o)

/psc
Avatar billede tdafoobar Nybegynder
21. november 2006 - 21:58 #5
:-)
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