[JS] plain-tekst uitvoeren als functie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 13-09 22:55
Ik ben bezig met een jQuery functie waarin door de gebruiker (diegene die het op zijn website implementeert), variabelen meegegeven kunnen worden die in de functie opgenomen worden.
Een van die variabelen is bedoeld als callback-functie die in mijn code getriggerd wordt.

Ik heb door een aantal andere jQuery plugins zitten neuzen om te zien hoe het daar gedaan wordt en daar gaat t als volgt:

Voorbeeld:
JavaScript:
1
2
3
4
5
var callbackCode = function(){alert('dit werkt')}

function DoeActie(){
callbackCode.call(this);
}


Dit gaat echter mis bij mij en de error die ik krijg is de volgende:
"Object function (){alert('ping')} has no method 'call'"

Hoe zorg ik dat ik de code toch kan uitvoeren?

Acties:
  • 0 Henk 'm!

  • ieperlingetje
  • Registratie: September 2007
  • Niet online
eval() ?

Tijdmachine | Nieuws trends


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Je kunt gewoon callbackCode callen..
JavaScript:
1
2
3
4
5
var callbackCode = function(){alert('dit werkt')}

function DoeActie(){
callbackCode(this);
}

[ Voor 60% gewijzigd door frickY op 20-05-2011 18:52 ]


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 09:10
Ik neem aan dat de text in een database opgeslagen wordt? In dat geval kun je kijken of de header informatie wel correct is, en of er dus "text/javascript" meegezonden wordt ipv "text/plain".

Acties:
  • 0 Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 13-09 22:55
@frickY; als ik callbackCode() call werkt dat niet, "string is not a function".
@alex3305; nee, de tekst komt niet uit een database maar wordt in de aanroep van de functie als argument meegegeven:

JavaScript:
1
2
3
4
$('div').mijneigenfunctie({
elementwidth: 350,
customcallback: function(){alert('ping')}
});


op die manier dus. De functie zit dan volgens mij als tekst in de variabele, en kan m dan dus niet aanroepen als functie.
Wat ik op de plaats van de callbackcode vervolgens aanroep is dan "settings.customcallback"

[ Voor 9% gewijzigd door Duncank op 20-05-2011 20:20 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Duncank schreef op vrijdag 20 mei 2011 @ 20:16:
@frickY; als ik callbackCode() call werkt dat niet, "string is not a function".
Dan doe je iets anders dan wat je hier post. Als je mijn code runned zul je zien dat dit namelijk wel werkt.
JavaScript:
1
2
3
4
$('div').mijneigenfunctie({
elementwidth: 350,
customcallback: function(){alert('ping')}
});

op die manier dus. De functie zit dan volgens mij als tekst in de variabele, en kan m dan dus niet aanroepen als functie.
Wat ik op de plaats van de callbackcode vervolgens aanroep is dan "settings.customcallback"
Je stopt nu een object met de properties elementwidth en customcallback in de functie mijneigenfunctie(). Die customcallback binnen je eigen functie callen werkt hetzelfde;
JavaScript:
1
2
3
4
function mijneigenfunctie(o) {
   var callback = o.customcallback;
   callback();
}


customcallback is dus geen string, maar een function. Doe maar een alert(typeof customcallback);.

Acties:
  • 0 Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 13-09 22:55
@frickY, thanks! Wat je suggereert heeft geholpen!
Het was even lastig omdat ik buiten de scope van de functie waarin de properties gezet worden aan het werk was, maar met behulp van een window.variabele is het gelukt de functie op die manier aan te spreken zoals jij m in het voorbeeld geeft. En dat werkt!
Thanks!
Pagina: 1