【问题标题】:JQuery .click() event, very odd behavior in IE 8&9JQuery .click() 事件,IE 8&9 中非常奇怪的行为
【发布时间】:2012-11-19 20:19:41
【问题描述】:

我创建了一个视频库,它根据元素的数据属性通过 swfobject 加载 Youtube 视频。它在所有浏览器中都运行良好,除了 IE。我看到的奇怪行为没有意义。

每个缩略图的标记如下:

<li>
    <div class="movie-image">
        <a class="" data-videotitle="Title" data-videoid="$node.contribution('video')" href="http://www.youtube.com/watch?v=41ZskpgQqZ4">
            <img class="video-link" data-videotitle="Title" data-videoid="41ZskpgQqZ4" src="http://img.youtube.com/vi/41ZskpgQqZ4/default.jpg" alt="Title">
            <h5>Title</h5>
        </a>
    </div>
</li>

用这个javascript绑定事件:

$('.video-link').click(function(){
    player.setVideo(this.getAttribute("data-videoid"), true);
    player.setTitle(this.getAttribute("data-videotitle"));
    window.event.returnValue = false; //IESUX
    if(window.event.stopPropagation) window.event.stopPropagation();
    window.event.cancelBubble = true;
    //Yes, there's a lot of redundancy here. None has worked.
    return false;
})

现在,这是奇怪的部分:当我在除 IE 之外的任何浏览器中单击链接时,该事件都可以正常工作。

但是,在 IE 中,如果我单击 h5 元素,一切正常。但是,如果我单击图像,浏览器会导航到缩略图。这真的很奇怪,因为这甚至不是链接的目标。

编辑:我忘了说,我在这个特定网页上使用 JQuery 1.4.2 时卡住了。

编辑 2: 嗯……废话。我只是尝试组合一个小提琴来显示问题,但小提琴工作正常,即使使用旧版本的 JQuery。

【问题讨论】:

  • 只看你的代码和标记,当你点击 h5 元素时,它应该导航到所有浏览器中的视频。您所做的任何事情都不应该导航到缩略图。
  • 我知道...这就是为什么它如此奇怪。
  • 这有点挑剔,但我认为点击 h5 在点击处理程序中根本不应该做任何事情。或者如果事件确实冒泡,它应该会导致错误,因为 h5 没有任何数据属性。您确定匿名函数中的this 指的是您认为它的作用吗?
  • 在 JS 中,click 事件将一直传播,直到找到事件侦听器(然后甚至超出此范围,除非您明确停止气泡),所以,是的,点击功能以 div 为目标射击。

标签: javascript jquery internet-explorer event-handling event-bubbling


【解决方案1】:

jQuery 包装了事件对象,并为它提供了可以更好地完成您想要做的事情的方法:

$(".video-link").click(function (e) {
   player.setVideo(this.getAttribute("data-videoid"), true);
   player.setTitle(this.getAttribute("data-videotitle"));
   e.stopPropagation();
   e.preventDefault();
});

请注意,return false 被明确省略了——你不需要它。

我的猜测是,IE 要么抛出某种错误,停止 JS 执行并最终跟随链接,要么没有正确停止默认操作。

【讨论】:

  • 奇怪的是return false 会自动执行stopPropagation 和preventDefault。嗯
  • 正如我刚刚在编辑中指出的那样,我在此使用 JQuery 1.4.2...也许这就是为什么返回 false 不起作用?我会在一分钟内尝试这个并告诉你它是怎么回事。
  • @mcpDESIGNS 我的建议可能是由于事先出现错误而无法到达return false,但我想我的建议并不能解决它。你知道点击事件是否在IE中被触发吗?
  • 是的,点击功能被触发并在失控之前完全执行。我想我可能与页面上运行的另一个脚本发生冲突,因为我尝试制作一个最小的 JSFiddle,它工作正常,即使使用旧版本的 JQuery。此外,发生默认操作似乎不是问题,因为链接的目标与浏览器结束的位置不同。
  • 我投票给你是因为在正常情况下,这个答案会非常有帮助,并且可能会解决问题。但是,对于旧版本的 JQuery、IE 以及可能正在运行的另一个脚本来说,这是一个奇怪的问题。我摆脱了锚标签,它现在似乎可以工作了。
猜你喜欢
  • 2011-07-31
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多