Подтвердить что ты не робот

Изменить атрибут onClick с помощью javascript

Это моя функция, и она должна изменить атрибут onClick для ввода HTML, но если я использую

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

он вообще не работает, но если я использую

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

функция выполняется сама по себе! Любые идеи, какой код я должен использовать для изменения атрибута onCLick БЕЗ выполнения функции, до нажатия кнопки?
Вот полная функция, если это имеет значение:

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;
    }
}
4b9b3361

Ответ 1

Вы хотите сделать это - установите функцию, которая будет выполнена для ответа на событие onclick:

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

То, что вы делаете, не работает, потому что:

  • Обработчик события onclick ожидает иметь функцию, здесь вы назначаете строку

    document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
    
  • В этом вы назначаете в качестве обработчика события onclick результат выполнения функции writeLED (1,1):

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

Ответ 2

Ну, просто сделайте это, и ваша проблема решена:

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

Хороший день XD

Ответ 3

Строка onclick = writeLED(1,1) означает, что вы хотите немедленно выполнить функцию writeLED (arg1, arg2) с аргументами 1, 1 и присвоить возвращаемое значение; вам нужно вместо этого создать функцию, которая будет выполняться с этими аргументами и назначить ее. Самый верхний ответ дал один пример: другой - использовать функцию bind() следующим образом:

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

Ответ 4

Фактически вы не меняете функцию.

onClick назначается функции (которая является ссылкой на что-то, указателем функции в этом случае). Значения, переданные ему, не имеют значения, и не может использоваться любым способом.

Другая проблема заключается в том, что ваша переменная color кажется из ниоткуда.

В идеале, внутри функции вы должны поставить эту логику и дать понять, что писать. (включение/выключение и т.д.)