Toon posts:

[JS] plain-tekst uitvoeren als functie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 31-05 22:14
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:
  • 0Henk 'm!

  • ieperlingetje
  • Registratie: September 2007
  • Laatst online: 01-06 22:00
eval() ?

Acties:
  • 0Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 19:36
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:
  • 0Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 03-06 13:04
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:
  • 0Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 31-05 22:14
@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:
  • 0Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 19:36
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:
  • 0Henk 'm!

  • Duncank
  • Registratie: December 2007
  • Laatst online: 31-05 22:14
@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


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee