使用javascript更改onClick属性

shi*_*iro 41 html javascript function

这是我的函数,它应该改变HTML输入的onClick属性,但是如果我使用的话

document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
Run Code Online (Sandbox Code Playgroud)

它根本不起作用,但如果我使用的话

document.getElementById('buttonLED'+id).onclick = writeLED(1,1);
Run Code Online (Sandbox Code Playgroud)

该函数自行执行!在单击按钮之前,我必须使用哪些代码来更改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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*eri 70

好吧,只需这样做,你的问题就解决了:

document.getElementById('buttonLED'+id).setAttribute('onclick','writeLED(1,1)')
Run Code Online (Sandbox Code Playgroud)

有一个美好的一天XD

  • 非常感谢。那正是我想要的行为。 (2认同)
  • 这似乎是对实际问题的答案,而不是仅仅为了使某项工作奏效。 (2认同)
  • 寻找了几个小时的解决方案之后,您才解决了我的问题!:) 谢谢!!! (2认同)
  • 截至今天,“addEventListener() 方法是注册事件监听器的*推荐*方法” – [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget /addEventListener)。那么,它应该是`document.getElementById('buttonLED'+id).addEventListener('onclick', writeLED.bind([1,1]))`吗?([参考](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#getting_data_into_and_out_of_an_event_listener)) (2认同)

Dan*_*anC 45

你想这样做 - 设置一个函数来执行以响应onclick事件:

document.getElementById('buttonLED'+id).onclick = function(){ writeLED(1,1); } ;
Run Code Online (Sandbox Code Playgroud)

你正在做的事情不起作用,因为:

  1. onclick事件处理程序需要一个函数,在这里你要分配一个字符串

    document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在此,您将onclick事件处理程序指定为执行writeLED(1,1)函数的结果:

    document.getElementById('buttonLED'+id).onclick = writeLED(1,1);
    
    Run Code Online (Sandbox Code Playgroud)

  • +1"当你遇到问题时 - 添加另一层抽象" - 经典:) (2认同)
  • 哦,我讨厌那个.如果检查buttonLED元素,您将看到未设置onclick属性,它将创建一个您将无法在源中看到的临时事件处理程序.Marcelo Teixeira Ruggeri在下面的回答实际上设置了onclick属性,这是原始问题所要求的.我不会贬低这个答案,因为它有效并且被接受了,但对我来说,它肯定会发臭. (2认同)