web-dev-qa-db-ja.com

JavaScriptでonClick属性を変更する

これは私の機能であり、HTML入力のonClick属性を変更する必要がありますが、

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

さて、これを行うだけであなたの問題は解決されます:

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

良い一日を

これを行うには、onclickイベントに応答するために実行される関数を設定します。

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

あなたがしていることは機能しません:

  1. Onclickイベントハンドラーには関数が必要です。ここでは文字列を割り当てています

    document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
    
  2. これでは、writeLED(1,1)関数を実行した結果をonclickイベントハンドラーとして割り当てています。

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

onclick = writeLED(1,1)は、即時関数writeLED(arg1、arg2)を引数1、1で実行し、戻り値を割り当てることを意味します。代わりに、それらの引数を使用して実行する関数を作成して割り当てる必要があります。一番上の答えは1つの例を示しました-もう1つは次のようにbind()関数を使用することです:

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

実際に機能を変更しているわけではありません。

onClickは関数に割り当てられます(これは何かへの参照であり、この場合は関数ポインターです)。渡される値は重要ではなく、cannotはどのような方法でも利用できます。

別の問題は、変数colorがどこからともなく見えることです。

理想的には、関数内にこのロジックを配置し、何を書くかを考えさせる必要があります。 (オン/オフなど)

0
Arindam

Javascriptの代わりにJqueryを使用して、'attr'の代わりに'setAttribute'プロパティを使用します

好む

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