2013-02-26 16 views
32

Diese meine Funktion ist, und es sollte das onClick-Attribut der HTML-Eingabe ändern, aber wenn ichändert onClick mit Javascript-Attribute

document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 

es verwende gar nicht arbeiten, aber wenn ich

document.getElementById('buttonLED'+id).onclick = writeLED(1,1); 

Die Funktion wird von selbst ausgeführt! Irgendwelche Ideen, welchen Code muss ich verwenden, um das onCLick-Attribut zu ändern, OHNE die Funktion auszuführen, bevor auf die Schaltfläche geklickt wird?
Hier ist die volle Funktion, wenn es darauf ankommt:

function showLED(id){ 
    if(color == 0){ 
     document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 
     document.getElementById('buttonLED'+id).value="light is on"; 
     //document.getElementById('buttonLED'+id).disabled = false; 
    }else{ 
     document.getElementById('buttonLED'+id).onclick = "writeLED(1,0)"; 
     document.getElementById('buttonLED'+id).value="light is off"; 
     //document.getElementById('buttonLED'+id).disabled = false; 
    } 
} 
+3

'document.getElementById ('buttonLED' + id) .onclick = "writeLED (1,1)";' ist Setzen Sie die 'onclick'-Eigenschaft des Elements auf eine Zeichenfolge. – crush

+2

'document.getElementById ('buttonLED' + id) .onclick = writeLED (1,1);' setzt die 'onclick'-Eigenschaft des Elements auf das Ergebnis von 'writeLED (1,1)' – crush

+0

Mögliches Duplikat von [ Ändern Sie onclick Aktion mit einer Javascript Funktion] (http: // stackoverflow.com/questions/5303899/change-onclick-action-with-a-javascript-funktion) – Vadzim

Antwort

43

Sie wollen, dies zu tun - eine Funktion festgelegt, die das Onclick-Ereignis reagieren ausgeführt werden:

document.getElementById('buttonLED'+id).onclick = function(){ writeLED(1,1); } ; 

Die Dinge, die Sie sind tut nicht funktionieren, weil:

  1. Der Onclick-Ereignishandler, eine Funktion zu haben erwartet, hier zuweisen Sie einen String

    document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 
    
  2. Dabei zuweisen Sie als OnClick Ereignishandler das Ergebnis der writeLED (1,1) Funktion ausführt:

    document.getElementById('buttonLED'+id).onclick = writeLED(1,1); 
    
+2

+1 "wenn Sie ein Problem haben - fügen Sie eine weitere Ebene der Abstraktion" - Klassiker :) – alfasin

+0

Funktioniert gut, ich habe es einfach und funktioniert perfekt, danke! – shiro

+2

Oh, ich hasse das. Wenn Sie das buttonLED-Element untersuchen, werden Sie feststellen, dass das onclick-Attribut nicht gesetzt ist. Es wird ein ephemerer Ereignishandler erstellt, den Sie in der Quelle nicht sehen können. Marcelo Teixeira Ruggeri Antwort unten setzt tatsächlich das Onclick-Attribut, das ist, was die ursprüngliche Frage gestellt. Ich werde diese Antwort nicht ablehnen, weil sie funktioniert und akzeptiert wurde, aber für mich stinkt es wirklich. –

0

Sie sind eigentlich nicht die Funktion zu verändern.

onClick ist einer Funktion zugewiesen (Dies ist ein Verweis auf etwas, in diesem Fall ein Funktionszeiger). Die Werte, die daran übergeben werden, sind nicht wichtig und kann nicht in irgendeiner Weise verwendet werden. Ein anderes Problem ist Ihre Variable color scheint aus dem Nichts.

Idealerweise sollten Sie innerhalb der Funktion diese Logik setzen und herausfinden, was geschrieben werden soll. (On/off etc etc)

52

Nun, tun nur dies und das Problem ist gelöst:

document.getElementById('buttonLED'+id).setAttribute('onclick','writeLED(1,1)') 

Haben Sie einen schönen Tag XD

+1

thnx viel. das ist genau das Verhalten, das ich wollte. – Rusty

+1

Dies scheint die Antwort auf die eigentliche Frage zu sein, und nicht nur ein Klotz, um etwas zum Laufen zu bringen. –

3

Die Linie onclick = writeLED(1,1) bedeutet, dass Sie wollen sofort ausführen die Funktion writeLED (arg1, arg2) mit den Argumenten 1, 1 und den Rückgabewert zuweisen; Sie müssen stattdessen eine Funktion erstellen, die mit diesen Argumenten ausgeführt wird und diese zuweisen. Die oberste Antwort ein Beispiel gab - eine andere ist es, die Funktion bind() wie so zu verwenden:

var writeLEDWithSpecifiedArguments = writeLED.bind(this, 1,1); 
    document.getElementById('buttonLED'+id).onclick = writeLEDWithSpecifiedArguments; 
Verwandte Themen