2017-02-18 10 views
-1

私は動的に作成されたスパン要素の配列リストを持っています。私は、クリックされたスパン要素のインデックスを取得したい。JavaScriptを使用してクリックされた配列要素のインデックスを取得する方法は?

私はこの方法でインデックスを取得できませんが、クリックした配列要素のインデックスを取得する最良の方法は何ですか?

enter image description here

enter image description here

+2

私は、彼らが不適切だった場合、私に知らせて、いくつかのタグを追加しました。それは標準のjavascriptではなく、代わりにreactとjsxのいくつかの組み合わせであるように見えます。 – Tyzoid

+0

カッコはアンバランスです。 – trincot

+0

これは還元反応ですか、反応しますか?使用しているテンプレートフレームワークで質問にタグを付けてください。 – trincot

答えて

1

あなたはあなたの関数へのインデックスとしてデータ配列の現在の長さを渡すことができます。

boundItemClick(idx, e) { // add idx as argument 
    console.log(idx); 
} 
render() { 
    var data=[]; 
    data.push (<div> 
     <span>{textLabel} onClick={this.boundItemClick.bind(this, data.length)}</span> 
     </div>); 
} 
+0

'this'はクリックハンドラがバインドされた' span'であるため、その親は子の 'div'です。 – trincot

+0

"this。parentElement"で定義されていません。 – user1234

+0

「this」がspan要素であることを確認できますか? – trincot

0

Pure JSソリューションを。

:それは1から数えますが、あなたがしたい場合は、0

var spans = document.getElementsByTagName('span'); 
 
[...spans].forEach((v,i) => v.addEventListener('click', function() { 
 
    console.log(i+1); 
 
}));
<span>one</span> 
 
<span>two</span> 
 
<span>three</span>

jQuery溶液からインデックスをカウントするために、それを調整することができます。

$('span').click(function(){ 
 
    console.log($(this).index()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<span>one</span> 
 
<span>two</span> 
 
<span>three</span>

0

各要素にclickイベントリスナーを割り当てる要素を反復処理し、カスタムハンドラ関数にインデックスをキャッシュし、合格するためにラムダを使用しています。

// Initialize our dynamically created elements array 
 
const elements = []; 
 

 
// Simulate the creation of elements dynamically 
 
const mkButton = text => Object.assign(document.createElement('button'), { textContent: text }) 
 
for(var i = 10; i-- > 0;) elements.push(document.body.appendChild(mkButton('click'))); 
 

 
// Custom handler function 
 
const handler = index => console.log(index); 
 

 
// Assign the listener with the cached index to each element 
 
elements.forEach((e, i) => e.addEventListener('click', event => handler(i), false));

関連する問題