2017-08-16 4 views
0

Mein Code ein onclick Funktion hinzuzufügen, ist als newbutton.onclick = whoWon(this.id)Assign onClick Funktion Ausgabe

Andere relevante-Code ist

var winner; 

function whoWon(name){ 
    winner = name 
} 

Mein Problem ergibt sich, dass die Onclick, wenn ich versuche, es zu zuweisen ausführt und doesn‘ t fügen Sie den onclick hinzu. Ich weiß das, denn wenn ich den neuen Button erstelle, ist der variable Gewinner immer der zuletzt erstellte Button. Auch wenn ich das Element in Google Chrome inspiziere, ist das einzige, was zugewiesen wird, die ID und die Klasse.

Antwort

2

newbutton.onclick = whoWon(this.id) wird tatsächlich die whoWon Funktion aufrufen.

Sie müssen die whoWon wie sie ist übergeben, ohne es aufzurufen und binden Sie die this.id. Dies sollte den Trick:

newbutton.onclick = whoWon.bind(null, this.id) 

Oder wie @styfle in den Kommentaren erwähnt, könnten Sie eine anonyme Funktion erstellen:

newbutton.onclick =() => whoWon(this.id) 
+0

Oder Sie können eine anonyme Funktion mit 'newbutton.onclick =() zuweisen => whoWon (this.id) ' – styfle

+0

Danke für das Aufzeigen, beantworten bearbeitet :) – Erazihel

+0

Ich habe versucht, beide dieser Vorschläge, aber es funktioniert immer noch nicht. Ist der Button in einer Tabellenzeile ein Problem? –

1

Ihr Code newbutton.onclick = whoWon(this.id) führt whoWom(this.id) und weist das Ergebnis davon (die ist undefined in diesem Fall) zu newbutton.onclick.

Was Sie wirklich werden sollte mit ist:

newbutton.addEventListener('click', whoWon); 

Von dort können Sie das Äquivalent von this.id Zugriff mit event.target.id