50

これは私の関数であり、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;
    }
}
4

6 に答える 6

96

さて、これを行うだけで問題は解決します:

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

良い一日を。XD

于 2014-05-01T17:17:12.283 に答える
47

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

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

あなたがしていることは、次の理由で機能しません。

  1. onclick イベント ハンドラーには関数があることが想定されています。ここでは、文字列を割り当てています。

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

    document.getElementById('buttonLED'+id).onclick = writeLED(1,1);
    
于 2013-02-26T19:12:56.297 に答える
3

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

    var writeLEDWithSpecifiedArguments = writeLED.bind(this, 1,1);
    document.getElementById('buttonLED'+id).onclick = writeLEDWithSpecifiedArguments;
于 2015-07-02T18:21:14.303 に答える
0

実際には機能を変更していません。

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

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

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

于 2013-02-26T19:15:16.533 に答える