Toon posts:

[JS] Replace() functie doet niks

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ben bezig met een script voor de events van knoppen. De replace() functie doet raar, waarschijnlijk snap ik nog niet helemaal hoe ie werkt (als PHPer).

De string wordt telkens wel gevonden, maar telkens ook niét vervangen door de replace(); (zie regel 11)
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var hold_button = document.getElementById('hold_button');
    if (hold_button != null) {
        hold_button.onclick = function() {
            // replace image
            var dir = 'styles/xp/img/'; var img = this.getElementsByTagName( 'img' ).item(0);
            if (this.className.indexOf(' hold') != -1) { img.src = dir + 'hold.gif'; } else { img.src = dir + 'hold_down.gif'; }

            // give proper class
            //if (this.className.indexOf(' hold') != -1) { this.className = 'toolbar_button' } else { this.className += ' hold'; }
            var regex = new RegExp(' hold', 'g');
            if (this.className.indexOf(' hold') != -1) { this.className.replace(regex, ''); } else { this.className += ' hold'; }
        }
        hold_button.onmouseover = function() {
            if (this.className.indexOf(' hover') == -1) { this.className += ' hover'; }
        }
        hold_button.onmouseup   = function() {
            if (this.className.indexOf(' hover') == -1) { this.className += ' hover'; }
            if (this.className.indexOf(' down')  != -1) { this.className.replace(' down', ''); }
        }
        hold_button.onmouseout  = function() {
            if (this.className.indexOf(' hover') != -1) { this.className.replace(' hover', ''); }
            if (this.className.indexOf(' down')  != -1) { this.className.replace(' down', ''); }
        }
        hold_button.onmousedown = function() {
            if (this.className.indexOf(' hover') != -1) { this.className.replace(' hover', ''); }
            if (this.className.indexOf(' down')  == -1) { this.className += ' down'; }
        }
    }

Zonder gebruik van replace() werkt ie natuurlijk wel, maar dan verlies ik een hoop mogelijkheden...

Kan iemand mij misschien vertellen wat ik hier fout doe?

[edit] De regex moet trouwens matchen op ' hold', belangrijk is dus dat de spatie (of meerdere) die vòòr 'hold' staan ook meegenomen worden!

Alvast bedankt!

[ Voor 26% gewijzigd door Verwijderd op 08-07-2005 17:27 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 04-05 16:01

André

Analytics dude

De replace werkt wel, doe maar eens het volgende:
code:
1
if (this.className.indexOf(' hold') != -1) { this.className.replace(' hold', ''); } else { this.className += ' hold'; }

Het gaat fout in je regexp :)

Verwijderd

replace() returnt de veranderde string maar verandert de string zelf niet. Meestal doe je dan dus ook:
code:
1
s = s.replace( ... );

http://developer-test.moz...ce:Objects:String:replace

[ Voor 25% gewijzigd door Verwijderd op 08-07-2005 22:51 ]


Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 08 juli 2005 @ 22:50:
replace() returnt de veranderde string maar verandert de string zelf niet. Meestal doe je dan dus ook:
code:
1
s = s.replace( ... );

http://developer-test.moz...ce:Objects:String:replace
Dat was em! Thanks!!!

Bedankt ook gelijk voor die reference link, ik dacht dat die JS reference (van Netscape) offline was...