web-dev-qa-db-fra.com

Changer l'attribut onClick avec javascript

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;
    }
}
36
shiro

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:

  1. 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)";
    
  2. 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);
    
45
DanC

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;
3
pmitchell

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)

0
Arindam

En utilisant Jquery au lieu de Javascript, Utilise la propriété 'attr' au lieu de 'setAttribute'

comme 

$('buttonLED'+id).attr('onclick','writeLED(1,1)')
0
Muhammad Yasir