C’est ma fonction et cela devrait changer l’attribut onClick de l’entrée HTML, mais si j’utilise
document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
ça ne marche pas du tout, mais si j'utilise
document.getElementById('buttonLED'+id).onclick = writeLED(1,1);
la fonction s'exécute par elle-même!
Voici la fonction complète, si elle compte:
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;
}
}
Eh bien, faites ceci et votre problème est résolu:
document.getElementById('buttonLED'+id).setAttribute('onclick','writeLED(1,1)')
Bonne journée XD
Vous voulez le faire - définissez une fonction qui sera exécutée pour répondre à l'événement onclick:
document.getElementById('buttonLED'+id).onclick = function(){ writeLED(1,1); } ;
Les choses que vous faites ne fonctionnent pas parce que:
Le gestionnaire d’événements onclick s’attend à avoir une fonction, ici vous attribuez une chaîne
document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
En cela, vous affectez en tant que gestionnaire d'événements onclick le résultat de l'exécution de la fonction writeLED (1,1):
document.getElementById('buttonLED'+id).onclick = writeLED(1,1);
La ligne onclick = writeLED(1,1)
signifie que vous voulez immédiatement exécuter la fonction writeLED (arg1, arg2) avec les arguments 1, 1 et affecter la valeur de retour; vous devez plutôt créer une fonction qui sera exécutée avec ces arguments et l'affecter. La réponse la plus haute a donné un exemple - un autre consiste à utiliser la fonction bind () comme suit:
var writeLEDWithSpecifiedArguments = writeLED.bind(this, 1,1);
document.getElementById('buttonLED'+id).onclick = writeLEDWithSpecifiedArguments;
Vous ne changez pas réellement la fonction.
onClick
est assigné à une fonction (qui est une référence à quelque chose, un pointeur de fonction dans ce cas). Les valeurs qui lui sont transmises importent peu et ne peuvent pas ne peuvent être utilisées de quelque manière que ce soit.
Un autre problème est que votre variable color
semble sortir de nulle part.
Idéalement, dans la fonction, vous devez mettre cette logique et la laisser comprendre quoi écrire. (on/off etc etc)
En utilisant Jquery au lieu de Javascript, Utilise la propriété 'attr'
au lieu de 'setAttribute'
comme
$('buttonLED'+id).attr('onclick','writeLED(1,1)')