You are only interacting with the first of the elements that are selected by the jQuery selector. This is the meaning of the [0]
on the end of $('#youtube_player')[0]
Looking at your site code a quick fix may be to do seperate event handlers for each of the stop tabs.
$('#stop1').on('click', function() {
//$('#popup-youtube-player').stopVideo();
$('.youtube_player')[0].contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
});
$('#stop2').on('click', function() {
//$('#popup-youtube-player').stopVideo();
$('.youtube_player')[1].contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
});
If you wanted to make this more generic obviously some more work would need to be done. There's various ways of doing this and you could add a data attribute or class to allow you to link your tab link and the particular player you are looking at. Something like this (untested code):
$('.stop').on('click', function() {
var playeref = $(this).data('playerref');
$('[data-playerref="'+ playerref + '"')[0].contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
});
And then you would put matching data-playerref="whatever"
on both the stop link and the player (See Selecting element by data attribute )
I also wonder why you are sending the postMessage directly yourself rather than using the YTPlayer javascript object provided by Google? You can see the documentation here: https://developers.google.com/youtube/iframe_api_reference
I imagine that you would find the behaviour more reliable and easier to code with. I believe you could then create a player object for each of your videos and call player.pauseVideo()
on the one you want to pause.
Edit: drop in code to stop all videos
Following your comment earlier here is some drop in code that will stop all videos:
//You will probably want to change 'li' to a more specific selector e.g. #navTab
jQuery('li').on('click', function() {
jQuery('.youtube_player').each(function( index ){
thisPlayer = jQuery('.youtube_player')[index];
thisPlayer.contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
});
});
I've tested this and it will work on your site. You will probably want to replace the ('li') selector with something that is more specific.
I wrote this in noConflict style (without the '$') as I noticed that your site used that. This could have been another reason why your script didn't work.