2017-02-04 12 views
-1

次のコードスニペットがあります。問題はonclickイベントは最初のラベルと同じクラスを持つ2番目のラベルでは発生しません。何故ですか? 私はオンラインで検索し、複数のソリューションを見つけましたが、すべてがjQueryにあります。しかし、私は純粋なJavaScriptでそれをしたい。誰が私はここで間違って何を知っていますか?JavaScript:同じクラス名のイベントをクリック

var label = document.getElementsByClassName('text'); 
 
label[0].onclick = function() { 
 
\t console.log(true); 
 
};
<label class="text">Hello</label> 
 
<label class="text">World!</label>

PS:私は知っている、この質問は、ここで何回も頼まれました(しかし、解決策はjQueryのためのものです)。だから、重複としてこの質問をマークしないでください:/

+0

を試してみてください最初の '[0]'要素 – jake2389

答えて

0

labelクラスtextを持つすべての要素の配列であるので、label[0]は、文書内の最初の要素に適用されます。それを行うための最も簡単な方法は、おそらく、このような

for (var i = 0; i<label.length; i++){ 
    label[i].onclick = function() { 
     console.log(true); 
}; 
0
var label = document.getElementsByClassName('text'); 
for (var i = 0; i<label.length; i++) { 
    label[i].oncllick = function() { console.log(true); }; 
} 
2

あなたはevent delegationを使用できます。イベントの代表団の新しいラベルに

document.body.onclick = function (ev) { 
 
    if (ev.target.getAttribute("class") == "text") { 
 
    console.log(true); 
 
    } 
 
};
<label class="text">Hello</label> 
 
<label class="text">World!</label>

おかげでもクリック可能です:

var nLabels = 2; 
 

 
document.body.onclick = function (ev) { 
 
    var newLabel; 
 
    if (ev.target.getAttribute("class") == "text") { 
 
    console.log(ev.target.textContent); 
 
    } else if (ev.target.id == "btn-add-label") { 
 
    newLabel = document.createElement("label"); 
 
    newLabel.setAttribute("class", "text"); 
 
    newLabel.textContent = " new label #" + (nLabels++); 
 
    document.body.appendChild(newLabel); 
 
    } 
 
};
<button type="button" id="btn-add-label">Add label</button> 
 
<label class="text">Hello</label> 
 
<label class="text">World!</label>

+1

より複雑なDOM構造があれば、このアプローチを最初の親コンテナに適用するほうがよいでしょう。しかし、委任を使用するのは良い方向です。+1 – RomanPerekhrest

+0

私はあなたに同意します@RomanPerekhrest、+1 :-) – leaf

-1

としてループとなり `getElementsByClassName`は、ノードの配列(コレクション)を返して、あなただけに関数を適用している。この

var label = document.getElementsByClassName('text'); 
for (var i = 0; i < label.length; i++) { 
    label[i].onclick = function() { 
     console.log(true); 
    }; 
} 
関連する問題