【发布时间】:2023-03-31 13:40:01
【问题描述】:
我正在使用带有 Rails Unobtrusive JavaScript 的 Twitter Bootstrap 的按钮加载状态 http://twitter.github.com/bootstrap/javascript.html#buttons
表单元素使用data-remote="true" 选项并返回一个.js 文件。
提交按钮调用.button("loading"),使用如下JS:
$(document).on("click", ".btn-loading", function() {
var btn;
btn = $(this);
btn.button("loading");
});
有没有办法检测 Ajax 成功和错误条件并重置按钮状态?
我尝试执行类似下面的操作,但在触发此功能后,我无法弄清楚如何访问处于活动状态的.btn-loading 元素
$(document).on("ajax:success", function(evt, data, status, xhr) {
var btn;
btn = $(this); //how to access .btn-loading() that's active?
btn.button("reset");
btn.button("toggle");
});
关于如何在 ajax 请求后重置按钮有什么建议吗?
另外,如何检测 HTML5 错误并重置按钮状态?
更新:2012 年 8 月 14 日
我发现你可以通过以下方式监听事件并触发按钮:
$(document).on("ajax:success", "form[data-remote]", function(evt, data, status, xhr) {
var el;
el = $(this).find('.btn-loading');
el.button("reset");
el.button("toggle");
});
查看此维基:https://github.com/rails/jquery-ujs/wiki/ajax
但是,错误捕获部分不起作用,有人成功了吗?
$("form").live("ajax:aborted:required", function(evt, elements) {
var el;
el = $(this).find('.btn-loading');
el.button("reset");
el.button("toggle");
});
【问题讨论】:
-
您在哪里发出实际的 ajax 请求?这就是您需要添加回调以重置按钮状态的地方。
-
嗨,Jeff,我在表单中使用 Rails 3 的 Unobtrusive JavaScript 的 data-remote="true",它会自动将任何表单转换为 ajax 调用。因此,我认为我不能专门调用 $.ajax() 并知道单击了哪个 DOM 元素。
标签: javascript ruby-on-rails-3 twitter-bootstrap