login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[JS]this overload

Offline Wijnand - 01/12/2008 16:18
Avatar van WijnandModerator Ik ben bezig met een functie (eigenlijk is hij al klaar) waarmee ik een onchange-event die in de html is aangeroepen kan uitbreiden (via een bestandje).

De functie die ik gebruik om hem uit te breiden wordt zo aangeroepen:

  1. pol = overloadOnChange(input, function() {toBedrag(this.value,this);});


Het 1ste argument is een inputveld (document.getElementById('iets')).
Het 2de argument is een function() {}. Dit is noodzakelijk voor de functie. De functie die voegt deze functie of code binnenin function() {} toe aan de onchange.

Zodra ik de onchange aanroep, dan roept hij ook daadwerkelijk de functie toBedrag aan..

Maar, this.value en this hebben nu de waarde van function(){} overgenomen. Dus 'this.value' is niet de waarde van input (wat wel zo zou moeten zijn) maar maar 'this.value' van function() oftewel -> undefined.

Heeft iemand enig idee hoe ik dit kan aanpassen zodat 'this' de juiste waarde krijgt?

2 antwoorden

Gesponsorde links
Offline Stijn - 01/12/2008 17:10
Avatar van Stijn PHP expert Geef 'this.value' en 'this' mee als parameters en gebruik die parameters in je functie.

  1. ...input, function(waarde , obj) { toBedrag(waarde,obj); }


Of ipv 'this' gebruik 'input'.
Offline Wijnand - 01/12/2008 17:31 (laatste wijziging 03/12/2008 10:22)
Avatar van Wijnand Moderator Nee.. beide werken niet.

Ik zal de code even posten:

  1. pol = overloadOnChange(inp, function() {toBedrag(inp.value,inp);});
  2.  
  3. function overloadOnChange(ind, nieuw) {
  4. if(typeof ind.onChangeFuncs == 'undefined') ind.onChangeFuncs = [];
  5.  
  6. ind.onChangeFuncs.push(nieuw);
  7. if(typeof ind.onchange == 'function') {
  8. ind.onChangeFuncs.push(ind.onchange);
  9. }
  10.  
  11. ind.onchange = function() {
  12. for(var i = 0; i < this.onChangeFuncs.length; i++) {
  13. this.onChangeFuncs[i]();
  14. }
  15. }
  16. }


Dit geeft op zich geen errors.. maar hij doet ook iets. Hij voert die functie toBedrag niet uit.


Edit 1:
Er gaat iets anders fout dan dat ik dacht. Die nieuwe functie WORDT toegevoegd en uitgevoerd. Het probleem is dat hij het laatste veld pakt. Dus als ik 3 inputvelden heb met daarin getallen.. dan maakt het niet uit welke ik pak, hij voert altijd de onchange van het laatste inputveld (de 3de in dit geval).

Edit 2:
Hij voert alle onchanges uit alleen blijft het bovenstaande (edit 1) probleem bestaan. Behalve dat zit er in de onchange (in de html) een functie die ook 'this' gebruikt wat altijd werk TENZIJ je overloadOnChange() gebruikt want dan wordt 'this' gekopieerd van overloadOnChange() en dus werkt this.value niet goed.

Wat de oplossing zou zijn is dat alle functies die worden aangeroepen met this.onChangeFuncs[i]() dat die hun this-waarde behouden en niet de this-waarde aannemen van overloadOnChange(). Maar hoe kan ik dat voor elkaar krijgen?


Edit2b:
Misschien is het mogelijk om 'this' uit te breiden met 'input-object'. Dus zoiets:

this.extend = input;

Dus dat als je this.value doet hij input.value vind. Ik weet niet of zoiets mogelijk is (kon het niet vinden op het internet) maar dit zou kunnen werken of niet? Alleen dan zou hij ook de gegevens die hij al heeft moeten gaan overschrijven. Weet iemand of dit kan (en zo ja: hoe dit gedaan behoort te worden).

Ik denk dat 2b niet kan. Wat kan wel werken dan?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.215s