Изменить атрибут 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;
}
}
Ответы
Ответ 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
кажется из ниоткуда.
В идеале, внутри функции вы должны поставить эту логику и дать понять, что писать. (включение/выключение и т.д.)