Javascript 停止广播不';我好像不工作

Javascript 停止广播不';我好像不工作,javascript,javascript-events,Javascript,Javascript Events,我试图在一个有点击事件的DIV块内部实现一个链接 如果用户单击链接,我希望外部DIV click事件不运行 我的链接看起来像: <a href="javascript: openVideo('videoID', this, event); " >Watch the video</a> function openVideo(video, object, event) { $(object).html($(object).html()+"<iframe w

我试图在一个有点击事件的DIV块内部实现一个链接

如果用户单击链接,我希望外部DIV click事件不运行

我的链接看起来像:

<a href="javascript: openVideo('videoID', this, event); " >Watch the video</a>
 function openVideo(video, object, event) {

    $(object).html($(object).html()+"<iframe width='360' height='315' src='http://www.youtube.com/embed/"+video+"' frameborder='0' allowfullscreen></iframe>");

    event.stopPropagation();
 }

可能是什么问题?

因为没有调用任何事件。试着这样称呼它:

<a href="#" onclick="openVideo('videoID', this, event); " >Watch the video</a>


我看到您正在使用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>
使用委托会带来少量的性能损失,因此请尝试将事件放置在DOM中尽可能低的元素上。此外,如果您将代理放在文档上,则无法真正停止代理,因为它已经到达顶部,尽管我相信您确实更关心
preventDefault()
试试看

 $("a").on("click", function (e) {
            e.stopPropagation ();
        });

编辑:我撒谎了<代码>停止播放。跟我一起去

据我所知,
stopPropagation
是一个jQuery函数,这意味着您需要jQuery事件处理程序创建的事件对象来调用它

这里有一个方法:

<a id="open-video-link" href="javascript: void(0);">Watch the video</a>

<script type="text/javascript">
  $("#open-video-link").click(function(event) {
    openVideo("videoID", this, event);
  });
</script>

$(“#打开视频链接”)。单击(功能(事件){
openVideo(“videoID”,本次活动);
});

当然,就拿我刚才写的内容来说吧,因为我的知识太模糊了,根本没有查过。

这非常有效!因此,当我在href中编写查询时,它不算作单击事件?@Arturs我认为您仍然需要执行
返回false
防止浏览器在单击时滚动到页面顶部。@Kranklin我可以添加javascript:void()吗;在href部分?@Arturs-点击链接会触发点击事件,但您没有正确捕获它。它似乎无法在IE上工作。我收到了SCRIPT438:Object不支持属性或方法“stopPropagation”,这会破坏页面上的其他链接。每个链接都有唯一的videoId,因此,我认为使用参数调用函数而不捕获单击事件更容易。这也是我的想法(您需要jQuery来执行
stopPropagation
),但事实并非如此。@DanTao我知道Chrome支持它,但IE可能不支持。我喜欢您的解决方案。唯一的问题是,我的数据(链接)是由ajax从不同的url加载的,因此我需要将此代码添加到每个链接所在的url中。就像我在主页加载准备就绪时只运行一次一样,当收到小的ajax数据时,它不会再次运行,因此如果我单击新数据,它不会执行代码。@Arturs,您仍然可以使用jQuery委托,而不是将侦听器直接附加到锚,您可以将它附加到DOM中更高的位置,这样它就不会被操纵。您不需要将任何侦听器绑定到任何新的锚元素。@Arturs,我已将答案更新为使用委托。注意,代码未经测试。
 $("a").on("click", function (e) {
            e.stopPropagation ();
        });
<a id="open-video-link" href="javascript: void(0);">Watch the video</a>

<script type="text/javascript">
  $("#open-video-link").click(function(event) {
    openVideo("videoID", this, event);
  });
</script>