我看到你正在使用 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 或更高版本,您可以使用委托,因此您不必将事件直接附加到锚点,而是附加到它的祖先之一。(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 中可能的最低元素上。另外,如果你把代理放在文档上,你不能真正停止传播,因为它已经到达顶部,虽然我相信你真的更关心preventDefault()