【问题标题】:jQuery appendTo breaks links on FirefoxjQuery appendTo 在 Firefox 上断开链接
【发布时间】:2015-10-19 21:46:41
【问题描述】:

我在 jQuery 中重新创建了 Material Design 涟漪效果,它在 IE11 和 Chrome 46 中运行良好,但在 Firefox 39 上,如果我将效果应用于链接,它会阻止重定向。我设法发现破坏我的代码的函数是 jQuery.appendTo() 函数。

小提琴: http://codepen.io/grekomp/pen/pjpzKQ

如您所见,当您在 Chrome 中单击该链接时,它可以工作,但 Firefox 只运行 js 并忽略该链接。

知道如何解决吗?我想使用一些跨浏览器兼容的解决方案。

【问题讨论】:

  • FF 39 不是最新版本。你检查过这个版本的错误报告吗?
  • 没有,但我刚刚更新到 firefox 40 并且问题仍然存在
  • 可能在您的代码中使用 $(this)this
  • 在 FF 中使用 $(this) 进行了测试,它按预期工作。 codepen.io/anon/pen/xwpGNw
  • @Daemedeor 我希望在用户按下鼠标按钮时出现涟漪效应,而不是在释放时出现(点击就是这样做的)

标签: javascript jquery html firefox


【解决方案1】:

如果您不添加$overlay div,则链接将按预期工作,并且您将获得大部分视觉效果。我不知道为什么,但添加该 div 会破坏链接 - 并且仅在 Firefox 上。

我建议您为 Firefox 开发人员打开一个错误,也许他们可以帮助您找到更好的解决方法。

编辑: 找到了解决办法!

pointer-events: none; css 添加到您的.ripple-effect.ripple-overlay div。

【讨论】:

  • 我可能会这样做,为了开发,但我的问题已经解决了,通过在 .ripple-effect 和 .ripple-overlay 的 css 中添加 pointer-events: none
  • 该死,我找到了和你写评论一样的解决方案
  • 感谢您的尝试!我已将您的答案标记为解决方案。
【解决方案2】:

问题是因为您使用的是 mousedown 事件而不是 click 事件...所以 FF 不会触发这两个事件(与 chrome 和 IE 不同)并且只会触发 mousedown 事件,因此您的解决方案(在 FF v31 上测试) :

$('.ripple').on('mousedown', rippleEffect );

编辑:因为 mousedown 必须工作,它在 FF 中的一个错误可能只有 click 或 mousedown 必须一次触发。所以它有点不雅,但复制了你要求的解决方案......

将此添加到 mousedown 处理程序的末尾

 this.click();

或者更好的是,从另一个答案 (Mousedown and Click conflict on Firefox) 中提到的 SO 将不会发生任何比赛事件:

a.ripple { 指针事件:无; }

【讨论】:

  • 这并不能真正解决问题,因为我希望该功能在 mousedown 上工作,以便向用户提供即时视觉反馈。
  • 就个人而言,我不知道为什么还要为涟漪而烦恼,因为 target="_blank" 运行速度如此之快,并使其成为用户几乎无法看到实际动画的活动选项卡
  • 普通链接在codepen上不起作用,所以我添加了target="_blank"来说明问题
  • 很公平,我不经常使用 codepen 来处理 js 的东西
  • 这不是我的问题的解决方案,因为我不想在鼠标按下时触发点击事件。它改变了默认的链接行为
【解决方案3】:

this 切换到$(this) 以将JQuery 应用于对象:

$("a").on("mousedown", function() {
    var p = $(this);
    var div = $('<div/>');
    div.text("Hello");
    div.appendTo(p);
});

$("a").click(function() {
    $(this).css("color", "green");
});

在 Windows 上的 FF 41 中测试。 http://codepen.io/anon/pen/xwpGNw

在你的新代码中,我发现:

$overlay.addClass('ripple-overlay')
    .css({
    background: $(this).data("ripple-color")
})
    .appendTo($(this));;

删除多余的分号不会有太大的不同,但这在 JSHint 上被击中了。我什至也将相同的代码移到了 jsfiddle 中进行测试:http://jsfiddle.net/Twisty/p4fvjvtf/ 我在你的笔上稍作改动,仍然有效:http://codepen.io/anon/pen/xwpwOE

也许我错过了什么不起作用。

编辑

根据 cmets,似乎将 pointer-events: none; 添加到创建的 DIV 的 CSS 解决了该问题。

【讨论】:

  • 还是不适合我,此外,笔只是一个例子,我的完整代码看起来并不完全相同
  • 这支笔正在为我工​​作。您确定要使用appendTo() 而不是appendAfter()?您想在您的A 中添加DIV
  • 在 FF 中为我工作,单击绿色框中的任何位置都会产生涟漪效应。我确实发现了一些需要清理的东西。稍后将编辑我的答案。
  • 涟漪效应适用于所有经过测试的浏览器,但绿色框是一个链接,它应该在新标签中打开 google。在 Firefox 上不会发生这种情况
  • 我现在明白了。并发现:stackoverflow.com/questions/27352128/…?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2015-01-08
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多