私は、入力内の文字を数え、divの入力の横にある文字の数を表示するオブジェクトを持っています。私は、clickイベントリスナーをdivに追加して、divを作成したオブジェクト内の関数を呼び出すとします。私は今ここに自分自身を混乱させていますいくつかのコードです:divを作成したオブジェクトを参照できるdivにeventListenerを追加
var CharDisplay = function(input, max) {
this.input = input;
this.maxChars = max;
this.direction = "countUp";
this.div = document.createElement("div");
this.div.setAttribute("class", "charCounter");
this.input.parentNode.appendChild(this.div);
var that = this; // I don't like doing this
// This function toggles the direction property and tells the extension
// to update localStorage with the new state of this char counter
var toggleDirection = function() {
that.direction = that.direction === "countUp" ? "countDown" : "countUp";
that.update();
chrome.extension.sendRequest({
"method" : "updateCharCounter",
"id" : that.input.id,
"state" : {
"direction" : that.direction,
"limit" : that.maxChars
}
});
}
this.div.addEventListener("click", toggleDirection);
}
私が望む行動はdiv要素をクリックしたときにシャアカウンタがカウント・ダウン('15の文字が「左)とアップカウントに切り替えることである('30 45文字の文字列)。私はcharStatementにcharカウンタの状態を格納するので、ユーザーがcharカウンタをどのような状態にしておいても、戻ってきたときにそのように見つかるでしょう。
このコードは実際にはうまく動作しますが、よりエレガントな方法があることを逃れることはできません。私はそれを稼働させるためにvar that = this
を追加しなければならなかったが、私はいつもそれが「ハック」であると感じ、できればそれを避けようとする。
あなたはこれを達成するためのより良い方法を考えてもらえませんか、または壊れていないものを修正しようとするのを止めるべきですか?
ありがとうございます。私は '呼び出し'と '適用'を見たが、私はそれらの周りに私の頭を得ることができませんでした。私はそれを得たと思ったが、これを達成するためにそれらを使ってみたが、うまくいかなかった。あなたの答えは、それらを少し明確にしています。 – MrMisterMan
これはChrome拡張機能なので、ブラウザの非互換性について心配する必要はありません。つまり、this.div.addEventListener( "click"、toggleDirection.bind(this)); – MrMisterMan
はい、互換性について気にしなければ – arnaud576875