2016-11-22 3 views
-2

これは説明が難しいかもしれませんので、私にご負担ください。Javascript - オブジェクトを変更させるaddEventListenerのパラメータを渡しますか?

for (var i = 0; i < this.array.length; i++) { 
    var object = this; 
    (function(object, i) { 
    object.array[i].addEventListener(event, function() { 
     func(i) 
    }, false) 
    }(object, i)); 
} 

ここでの配列は、クエリセレクタを使用して作成されたHTML要素の集まりです。

このコードは、プロトタイプメソッド内で保持され、パラメータ 'func'が渡されます。 'func'に渡される値は無名関数です。

上記のコードを使用すると、カウンタ 'i'を匿名関数に正常に渡すことができます。

他のメソッドの1つは、要素の配列に対してJavascriptのparentNode関数を使用します。ここに問題があります。上記のコードでは、配列要素がオブジェクトではないというエラーが発生しています。

ただし、このコードを使用するとエラーは発生しません。

for (var i = 0; i < this.array.length; i++) { 
    var object = this; 
    (function(object, i) { 
    object.array[i].addEventListener(event, func, false) 
    }(object, i)); 
} 

だから、何らかの理由では、addEventListenerで無名関数でラッピング「funcが」配列要素を変更している、少なくともあるように思われます。しかし、それは意味をなさないと思われますか?

+0

同じ名前の複数のスコープ(つまりオブジェクト、i)の変数に名前を付けるのはなぜですか? –

+2

'object.array。[i]'の代わりに 'object.array [i]'を使用してください。 –

+3

'object.array。[i]'は有効な構文ではありません。また、最初の例では 'func(i)'を呼び出しています。 2番目の方法では、 'func()'を呼び出すのと同じです。 –

答えて

0
  (function (object,i) { 

      object.array[i].addEventListener('click', 

      function(event){ 
      var targetElement = event.target || event.srcElement; 
      func(targetElement,i); 
      }, 

      false); 

      }(object,i)); 

私の必要に応じて要素。

+0

あなたはソフトウェア開発のように、少しでも実際の考えで試行錯誤しているように思えます。何らかの関数(この場合は 'func')を使用している場合は、それが何であるかを知っている必要があります - 必ずしも詳細ではありませんが、どの引数が必要なのかを知る必要があります。 。 (そして、実際は 'func'の' i'引数が使われていないので、 'func(targetElement);'と書いておきます) –

+0

この場合、funcは何もできませんそれはデザインの一部です。 – Guesser

+0

@DavidKnipe「あなたはソフトウェア開発のように聞こえるのは、実際の思考がほとんどない試行錯誤です」とはどういう意味ですか?私はあなたがその結論にどのように来たのか分かりません。 – Guesser

0

ここではバインドを使用できます。

チェック

for (var i = 0; i < this.array.length; i++) { 
    var object = this; 
    object[array[i]].addEventListener('click', fun.bind(this, i), f‌alse); 
} 

function func(i) { 
    alert(i); 
} 

はそれが役に立てば幸いこのスニペット

これは私がクリックされたのはparentNodeを参照することができ、動的機能にイベントを渡すことによって、最終的には私のために働いていたものです
+0

申し訳ありませんが、それほどうまくいかないアラームです。 – Guesser

関連する問題