0

新しい要素を作成する関数があり、<a>それに onclick イベントを追加したいと考えています。これは、指定された値を 1 増やす関数です。

関数では、次の要素を作成します。

spantags 内の番号:

        var spantags = document.createElement("span");
        var anzahl = 1;
        spantags.innerHTML = anzahl;

そして言及された<a>要素:

        var plus = document.createElement("a");
        plus.innerHTML = "+";
        plus.onclick = more(spantags.innerHTML);

ただし、これは、これを作成する関数で既に関数を実行しているため、作成時に数が 2 に増えました。

同様の質問でこの回答を読みました: https://stackoverflow.com/a/249084/1972372

この例は機能し、アラートは+がクリックされたときにのみ発生しましたが、それは内部関数であり、私の「more(element)」のような宣言された関数ではありません。

だから私の質問は:私の例のように、onclick属性を新しく作成された要素の宣言された関数に設定することは可能ですが、すぐに実行されないようにすることはできますか?

(他の記事にもjQueryの回答がありましたが、残念ながら私はjQueryの知識がなく使えません)

4

2 に答える 2

3

はい、「プロキシ」関数でラップするだけです。

plus.onclick = function() {
    more(spantags.innerHTML);
};
于 2013-06-27T16:23:55.707 に答える
1

確かに、しかし最初に が引数で呼び出されplus.onclick = more(spantags.innerHTML);、その関数呼び出しから返された結果が に代入されることを理解する必要があります。morespantags.innerHTMLplus.onclick

前に提案したようにプロキシ関数でラップするか、bindメソッドを利用して引数を関数自​​体にバインドすることができます。

plus.onclick = more.bind(null, spantags.innerHTML);

バインドについてはこちらをご覧ください: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

于 2013-06-27T16:28:39.080 に答える