2016-06-27 13 views
0

私はクラスplay-buttonで複数の要素を持っていますので、クリック時に関数を実行したいと思います。関数は1回だけ実行する必要があり、クリックされた要素でのみ実行する必要があります。しかし、私の現在のコードでは、同じ要素を持つすべての要素に対して同じ関数を実行します(class)。なぜこれをやっているのか分かりますが、解決策は考えられません。何か案は?jQueryは同じセレクタにもかかわらず一度クリック機能を実行します

これは私のjQueryのです:

$(".play-button").click(function() { 
     alert("hello") 
}); 

そして、これがHTMLのサンプルです:

<ul> 
<li><button class="play-button">content</li> 
<li><button class="play-button">content 2</li> 
</ul> 

UPDATE - FULL CODE:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script> 

<html> 
<h1>Uploads</h1> 
<ul id="results"></ul> 
<iframe src="http://youtube.com/embed/MsGT2CczVTk?controls=0&iv_load_policy=3&rel=0&showinfo=0" width="560" height="315" frameborder="0" allowfullscreen=""></iframe> 
</html> 

<script> 
//playlsit iD: UUtinbF-Q-fVthA0qrFQTgXQ 
//api key: AIzaSyBt-q6kHra6D7ZKDv7zRKi458KiiVaKkvE 
var channelName = 'caseyneistat'; 

$(document).ready(function() { 
    $.get (
     "https://www.googleapis.com/youtube/v3/channels", { 
      part: 'contentDetails', 
      forUsername: channelName, 
      key: 'AIzaSyBt-q6kHra6D7ZKDv7zRKi458KiiVaKkvE'}, 

      function (data) { 
       $.each(data.items, function(i, item) { 
        console.log(item); 
        pid = item.contentDetails.relatedPlaylists.uploads; 
        getVids(pid); 
       }); 
      } 

     ) 

    function getVids(pid) { 
     $.get (
     "https://www.googleapis.com/youtube/v3/playlistItems", { 
      part: 'snippet', 
      maxResults: 10, 
      playlistId: pid, 
      key: 'AIzaSyBt-q6kHra6D7ZKDv7zRKi458KiiVaKkvE'}, 

      function (data) { 
       var output; 
       $.each(data.items, function(i, item) { 
        console.log(item); 
        videoTitle = item.snippet.title; 
        videoId = item.snippet.resourceId.videoId; 

        output = '<li> <span>'+ videoTitle +'</span><br><div class="thumbnail-wrapper"><img src="http://img.youtube.com/vi/'+ videoId+'/mqdefault.jpg" class="thumbnail"><img src="http://www.radiobilly.com/wp-content/themes/radiobilly/img/play-white.png" class="play-button"></div><span id="videoId">'+ videoId +'</span></li>'; 
         // <iframe src="http://youtube.com/embed/'+ videoId +'"></li>'; 

        //Append to results list 
        $('#results').append(output); 

        $(".play-button").click(function() { 
         alert("hello"); 
        $(".play-button").off("click"); 
        }); 



       }); 

      } 

     ) 
    } 
}); 
</script> 

<style> 
    ul {list-style: none; padding: 0px} 
    iframe {display: none;} 


    /* Player Styling */ 
    .thumbnail { 
    max-width: 100%; 
    height: auto; 
    width: 100%; 

    } 

    .thumbnail-wrapper { 
    position: relative; 
    display: inline-block; 
    width: 100%; 

    } 

    .play-button { 
    position: absolute; 
    width: 50px; 
    height: 50px; 
    left: 0px; 
    margin-left: calc(50% - 25px); 
    margin-right: calc(50% - 25px); 
    top: calc(50% - 25px); 
    } 

    .ytp-chrome-top-buttons {display: none} 
</style> 
+0

あなたはIDを使用してみましたか? –

+0

idsを使用すると、各要素にidが必要です –

+0

これを実行しましたが、要素にJSONが埋め込まれました – dwinnbrown

答えて

1

それは一度だけ実行され、実際にクリックした要素で実行されます。あなたのマークアップにはボタンのクローズタグがありませんが、ボタンのHTMLに注意を喚起すれば、それが動作することがわかります。

Fiddle

<ul> 
<li><button class="play-button">content</button></li> 
<li><button class="play-button">content 2</button></li> 
</ul> 

$(".play-button").click(function() { 
     alert($(this).html()); 
}); 
+0

良いキャッチ、私はあなたがそれを述べるまでそれを見ませんでした。私の推測では、閉鎖がないので、OPのブラウザは最初のボタンの中に2番目のボタンを埋め込んでいるため、クリックイベントが2番目に発生し、最初に伝播します。 .clickハンドラは、同じクリックに対して2回呼び出されます。 – Dylon

+0

OPがイベントを1回限り発動させたい(Barmarの解決策)か、クリックごとに1回(私の解決策)発射させたいと思っているかどうかはわかりません。もし最初のものが真実ならば、私は自分の答えを削除することができます。 – IrkenInvader

+0

ボタンを閉じることが正しいはずです。 OPのマークアップは無効なので、期待通りに動作する可能性は低いです。 – Dylon

3

最初のクリックした後に、バインディングを削除するには.off()メソッドを使用することができます。

$(".play-button").click(function() { 
 
    alert("hello"); 
 
    $(".play-button").off("click"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul> 
 
<li><button class="play-button">content</button></li> 
 
<li><button class="play-button">content 2</button></li> 
 
</ul>

+0

私は使用している構文で実行を続けます。私は完全なコードを表示する更新された質問を参照してください – dwinnbrown

関連する問題