【发布时间】:2014-10-16 14:34:14
【问题描述】:
自定义 CSS 类 .btn-loading 禁用按钮并将其文本设置为加载状态:
$(document).on('click', '.btn-loading', function() {
var btn = $(this);
btn.button('loading');
// Fail-safe for buttons that get stuck in the loading state sometimes.
setTimeout(function() {
Rollbar.error("Button stuck");
btn.button('reset');
}, 10000);
});
// Be sure to remove any loading state on page refresh
$(document).on('ready page:load', function() {
$('.btn-loading').button('reset');
});
示例按钮
button type="submit" class="btn btn-primary btn-loading" data-loading-text="Processing..." Continue
按下按钮时,文本将更改为“处理中...”,并且按钮被禁用以防止多次提交。
但是,有时在开发和生产中,按钮会卡在加载状态,并且由于某种原因不会导致新页面的提交和/或呈现。 setTimeout 每天在生产服务器上触发多次。我们很难在开发中始终如一地产生问题。它时不时地随机发生。
Rollbar 的统计数据表明,它不是特定于浏览器的,也不是单个按钮+动作导致的。所以原因也不是服务器响应慢。
知道可能是什么原因造成的以及如何解决吗?
【问题讨论】:
-
loading被触发后你的 javascript 做了什么?此操作可能失败或无法正确返回。 -
你把这个脚本放在文档的什么地方?我已经看到与在 Turbolinks 应用的 中包含脚本标签有关的此类问题。
标签: javascript ruby-on-rails-4 twitter-bootstrap-3 turbolinks