2017-01-20 10 views
0

助けてください。再生ボタンのクリックイベントをすべてのdivに同時に適用しないようにしようとしています。クリックイベントは、クリックされたdivにのみ適用されます。私が今までに持っているものについては、以下のコードを見てください。私はバニラのJavascriptを使用しています。document.getElementsByClassNameのonclickイベントが同時にすべての要素に適用されました

<style> 
       div{ 
        width: 200px; 
        height: 200px; 
        border: 1px solid black; 
       } 
       .secondview{ 
        background-color: blue; 
       } 
       .firstview{ 
        visibility: hidden; 
        background-color: red; 
       } 
     </style> 
     <div class="secondview"> 
      <button class="play"> Play </button> 
      <div class="firstview"> 
       <p>Play this game </p> 
       <button id="submit"> Submit </button> 
      </div> 
     </div> 
     <div class="secondview"> 
      <button id="btn" class="play"> Play </button> 
      <div class="firstview"> 
       <p>Play this game </p> 
       <button id="submit"> Submit </button> 
      </div> 
     </div> 
     <div class="secondview"> 
      <button class="play"> Play </button> 
      <div class="firstview"> 
       <p>Play this game </p> 
       <button id="submit"> Submit </button> 
      </div> 
     </div> 
    <script> 
     var playBtn = document.getElementsByClassName("play"); 
      for (var i=0; i<playBtn.length; i++){ 
       playBtn[i].addEventListener("click", showQuestion) 
      } 
     var question = document.getElementsByClassName("firstview"); 
      function showQuestion(){ 
       for(j=0; j<question.length; j++){ 
        question[j].style.visibility = "visible"; 
       } 
      } 
    </script> 
+0

です時間 "私は何も理解していませんでした –

答えて

1

クリックのコールバック(質問変数は必要ありません)の前に「firstview」全体を反復処理する必要はありません。

あなたはそれぞれのクリックイベントのために、クリックしたボタンに相対的である「firstview」要素を取得する必要があります。

これは私が同じで、すべてのdiv要素に適用さから再生ボタンのクリックイベントを停止しようとしています」のサンプルコード(このコードを強化し、すべてのステップのためのヌル/未定義の確認)

function showQuestion (el){ 
    var view = el.target.parentElement.getElementsByClassName("firstview")[0]; 
     view.style.visibility = "visible"; 
} 
+0

ここで問題は、同じクラスを使用し、そのクラスでイベントが発生している理由です。 –

+0

彼の問題は異なっていた。 クラスでイベントをトリガーしていない場合は、イベントをエレメントに割り当てています。 さらに、構造を知るための異なるクラス/ idがパフォーマンスの問題や不要な複雑さを引き起こす可能性があります。 もちろん、vieをよりよく区別したい場合は、id \ classを論理的に配置し、イベントリスナーを最も確定的な方法でアタッチする必要があります。 – bgauryy

関連する問題