jquery_ujs 问题 : Font Awesome animated spinner works in Chrome but Not Safari

标签 jquery css ruby-on-rails ruby font-awesome

我正在使用 font-awesome-rails在我的 Rails 元素中。当用户点击表单上的提交按钮时:

  • 在提交按钮内应该有一个动画字体超棒的微调器,按钮内的文本应该变成“正在提交...”。
  • 该按钮应该被禁用,这样用户就无法多次提交表单。

以下代码在使用 Google Chrome 时完美运行:

<%= f.button "Submit", class: "btn btn-success", data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Submitting..."} %>

但是在 Safari 中:

  • 按钮已成功禁用
  • 但是微调器图标不会出现,并且文本不会改变。

我创建了一个小应用程序来显示这个问题。 The repo is here .在 Chrome 上提交 blog 表单,然后在 Safari 中提交。您会注意到该动画适用于 Chrome,但不适用于 safari。

我看到了this issue on jquery_ujs .有一些非常冗长的变通办法,但没有什么可以方便地在我想要实现此功能的所有地方重复使用。

这似乎是一个浏览器问题:一旦表单被提交,像 Safari 这样的东西不想做一些额外的处理,因为它不想减慢速度。

GoRails 的 Chris Oliver 向我指出,如果您在控制台中运行以下命令,甚至在 Safari 中:它会触发所需的效果:

$.rails.disableFormElement($("button"))

因此效果在 safari 中有效。当绑定(bind)到表单提交按钮时,它就不起作用了。我曾尝试使用 Safari 版本 9.1.2 和 10.0.1 执行此操作。我也在 Rails 4.2.6 和 Rails 5 中尝试过。

最佳答案

可能只是一个很好的快速修复...参见 this JSFiddle ,这是该问题的一个更小的最小示例。在 Safari 10.1 上,刷新对我来说大约有 70% 的时间是中断的。

然后我们通过 CSS 强制使用硬件加速:

form {
  -webkit-transform: translate3d(0,0,0);
  transform: translateZ(0); 
}

the problem goes away .

注意:从技术上讲,第一行 CSS 应该足以强制硬件加速,但这里绝对需要第二行才能工作...

关于jquery_ujs 问题 : Font Awesome animated spinner works in Chrome but Not Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43078118/

相关文章:

ruby-on-rails - 是否可以在测试中使用嵌入式 ruby​​?

html - 为什么 100% 的输入宽度总是超出包含的 div?

html - 如何从子元素中删除 CSS 类

javascript - 使用 jQuery 在增量 ID 输入之间进行迭代

jquery 更改表单 Action

html - 是否可以使用百分比在另一个 div 内的 float div 上设置最小高度?

mysql - 如何通过关系使用 has_many 缩短三重连接 ActiveRecord 查询?

ruby-on-rails - 无法为 Devise::OmniauthCallbacksController 找到操作 'google'

php - 如何在客户端存储一个php数组?

javascript - 如何使用 javascript 以编程方式启用和禁用按钮