javascript - UJS + Bootstrap按钮加载

标签 javascript ruby-on-rails-3 twitter-bootstrap

我正在使用 Twitter Bootstrap 的按钮加载状态和 Rails Unobtrusive JavaScript 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");
});

最佳答案

如果你看jquery docs on bind (通常用于事件处理),他们注意到处理程序函数中的 this 指的是 处理程序 绑定(bind)到的 DOM 元素 ,而不是发起事件的元素。因此,最简单的方法是为所有加载按钮提供一个公共(public)类(在本例中我们将其称为“ajax-button”),将您的成功处理程序绑定(bind)到该类,然后您将拥有适当的 this 在您的处理函数中可用。

如果您使用 jquery(假设您有一些函数 resetButton 可以执行您想要执行的任何重置操作),您只需使用类似以下内容即可进行重置。

$(".ajax-button").bind("ajax:success", function() { 
     $(this).button("reset").button("toggle");})

This tutorial on Unobtrusive Javascript有一些特定于 Rails 的良好附加信息

关于javascript - UJS + Bootstrap按钮加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11936204/

相关文章:

javascript - 是否可以将这些相似的功能合并为一个功能?

javascript:/*@ @*/是什么意思?

php - jQuery Ajax 发布到 php 没有捕获变量

javascript - $.post 不断重定向我

ruby - 如何将 Mongoid foreign_key 保存为整数或保持父模型具有整数 ID

ruby-on-rails - Rails3 应用程序的起点,它将成为 iphone 应用程序的后端

ruby-on-rails - 在 Ruby On Rails 中声明内联 key

html - Box Div 顺序错误

jquery - Bootstrap datetimepicker 在选项卡内容框内被切断

javascript - 使用 jquery onclick 函数在按钮上添加和删除事件类