jQueryを使っているようです。そのように使用することを意図したものではありません。渡すイベント オブジェクトは、ブラウザのネイティブ イベント オブジェクトです。jQuery のイベント オブジェクトは stopPropagation 関数を提供します。
jQuery を適切に使用するには、イベントをインラインではなく jQuery にバインドさせる必要があります。
<a href="#" class="openVideo" data-video="videoID" >Watch the video</a>
<script type='text/javascript'>
$(document).ready(function() {
$(".openVideo").click(function(ev) {
ev.preventDefault();
ev.stopPropagation();
var videoID = $(this).data('video');
$(this).append("<iframe width='360' height='315' src='http://www.youtube.com/embed/"+videoID+"' frameborder='0' allowfullscreen></iframe>");
});
});
</script>
編集: jQuery 1.4.3 以降ではデリゲートを使用できるため、イベントをアンカーに直接アタッチする必要はありませんが、その先祖の 1 つにアタッチする必要はありません。(jQuery 1.7 は.on
メソッドを使用して同じことを実現します)。
jQuery 1.7 を使用した例を次に示します:
http://jsfiddle.net/Tu9Hm/
<a href="#" class="openVideo" data-video="videoID" >Watch the video</a>
<script type='text/javascript'>
$(document).ready(function() {
$(document).on('click', '.openVideo', function(ev) {
ev.preventDefault();
ev.stopPropagation();
var videoID = $(this).data('video');
$(this).append("<iframe width='360' height='315' src='http://www.youtube.com/embed/"+videoID+"' frameborder='0' allowfullscreen></iframe>");
});
});
</script>
デリゲートを使用するとパフォーマンスがわずかに低下するため、DOM 内の可能な限り低い要素にイベントを配置するようにしてください。また、デリゲートをドキュメントに配置すると、Propagation はすでにトップに達しているため、実際には停止できませんが、あなたは本当にもっと心配していると思いますpreventDefault()