• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Fehlende Parameter nach *.apply(this, arguments)

scbawik

Senior HTML'ler
Hallo!

Habe ein Problem mit meinem ersten jQuery Plugin. Der Fehler besteht jedoch eher in JavaScript als in jQuery. Hier mal mein abgekürzter Code:

PHP:
var num = 1;
var methods = {
	next: function () {				num = num + 1;				alert('num vor der übergabe: ' + num);				methods.show.apply(this,Array(num));			},		show: function (idx) {				alert('num nach der übergabe: ' + idx);			}
}
$('.ziel').click(function () {		methods.next.apply(this,arguments);	});

Wenn ich jetzt auf 'ziel' klicke, bekomme ich folgende Ausgabe:

Code:
num vor der übergabe: 2
num nach der übergabe: undefined

Die Funktion wird also aufgerufen, Parameter auch übergeben - jedoch mit dem Wert 'undefined'. Da stimmt doch etwas nicht ???

PS: Mir ist in meinem abgekürzten Code aufgefallen, dass man auch direkt aus der Funktion 'show' auf 'num' zugreifen könnte. Bitte das ignorieren - in meinem Plugin muss ich diese als Parameter übergeben. Konkret geht es mir nur darum, wieso die arguments nicht korrekt übergeben werden..

Danke!!
 
Naja, ganz einfach: Du übergibst ein Array, und in der Funktion show willst du das Array wie einen String ausgeben.

Warum arbeitest du überhaupt mit apply? Du kannst gänzlich darauf verzichten, und den Code noch optimieren (wozu ein Array übergeben, wenn im Moment eh nur 1 Wert übergeben wird?)

Code:
var num = 1;
var methods = {
    next: function(){
        num = num + 1;
        alert('num vor der übergabe: ' + num);
        methods.show(num);
    },
    show: function(idx){
        alert('num nach der übergabe: ' + idx);
    }
}

$('.ziel').click(function(){
    methods.next(this,arguments);
});

Allerdings würde ich dir raten, die Funktionen umzubenennen. .next() & .show() gibt es beide in jQuery, kommt es also hier schon nicht zum crash, kommt es vielleicht beim nächsten Einlesen ins Plugin zu Problemen ;)
 
Hallo und danke für die Antwort!

Dass ich ein Array übergebe ist schon korrekt, da 'apply' ein Array erwartet. 'apply' muss ich verwenden, da ich den Geltungsbereich mit 'this' festlegen muss. Hätte wohl keinen Beispielcode posten sollen, denke aber es ist übersichtlicher als meine derzeitigen 500 Zeilen.

Konnte das Problem jetzt jedenfalls lösen, allerdings weiß ich nicht wieso :)

Habe die Variable 'num' in einen String konvertiert bevor ich sie dem Array hinzugefügt habe, seitdem funktioniert es. Macht für mich zwar überhaupt keinen Sinn, aber Hauptsache es läuft.

Nochmal Danke!
 
Zurück
Oben