Moderator |
|
Nee.. beide werken niet.
Ik zal de code even posten:
pol = overloadOnChange(inp, function() {toBedrag(inp.value,inp);});
function overloadOnChange(ind, nieuw) {
if(typeof ind.onChangeFuncs == 'undefined') ind.onChangeFuncs = [];
ind.onChangeFuncs.push(nieuw);
if(typeof ind.onchange == 'function') {
ind.onChangeFuncs.push(ind.onchange);
}
ind.onchange = function() {
for(var i = 0; i < this.onChangeFuncs.length; i++) {
this.onChangeFuncs[i]();
}
}
}
pol = overloadOnChange(inp, function() {toBedrag(inp.value,inp);}); function overloadOnChange(ind, nieuw) { if(typeof ind.onChangeFuncs == 'undefined') ind.onChangeFuncs = []; ind.onChangeFuncs.push(nieuw); if(typeof ind.onchange == 'function') { ind.onChangeFuncs.push(ind.onchange); } ind.onchange = function() { for(var i = 0; i < this.onChangeFuncs.length; i++) { this.onChangeFuncs[i](); } } }
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? |