如何在单击后禁用link_to_remote功能

时间:2011-01-27 09:31:43

标签: ruby-on-rails

我有一个link_to_remote方法:

<%= link_to_remote "Country", :url =>{:controller =>'country',:action=>'get_country_info',:id=>@count_id.to_i},:update=>"Details6",:loading => "Element.show('loader');",:complete => "Element.hide('loader');"%>

我想在用户点击后禁用该链接,我尝试使用:before=>"this.style.display=none"删除链接...我想要禁用自然。任何人都可以帮助我如何实现这一点。

4 个答案:

答案 0 :(得分:2)

我为link_to修复了以下内容:

在帮助者的某处添加:

module ActionView
  module Helpers
    module UrlHelper
      def link_to_with_disable(*args, &block)
        if block_given?
          link_to_without_disable(*args,&block)
        else
          html_options = args[2] || {}
          disable_with = html_options[:disable_with]
          if disable_with
            if html_options[:disable_with].kind_of? String
              html_options[:"data-onloadingtext"] = disable_with
             elsif html_options[:disable_with].kind_of? Array
              html_options[:"data-onloadingtext"] = disable_with[0] if disable_with[0]
              html_options[:"data-oncompletetext"] = disable_with[1] if disable_with[1]
            end
          end
          link_to_without_disable(*args)
        end
      end
      alias_method_chain :link_to, :disable unless method_defined?(:link_to_without_disable)
    end
  end
end

然后加载包含以下内容的javascript文件:

$("a[data-onloadingtext]").live("ajax:before", function(et, e){
  $(this).text($(this).attr('data-onloadingtext'))
         .attr('onclick','return false;')
         .addClass('disabled');
});
$("a[data-oncompletetext]").live("ajax:complete", function(et, e){
  $(this).text($(this).attr('data-oncompletetext'));
});

现在你可以做类似的事情:

<%= link_to 'foo', 'bar', :remote => true, :disable_with => 'foo_disabled' %>

<%= link_to 'foo', 'bar', :remote => true, :disable_with => ['foo_loading','foo_loaded'] %>

我非常愿意接受反馈;)仍然是ruby的新手,并试图学习如何整齐地解决问题;)

答案 1 :(得分:0)

它可能有点乱,但你可以做一个

<%= link_to_remote "Country", :url =>{:controller =>'country',:action=>'get_country_info',:id=>@count_id.to_i},:update => "Details6",:loading => "Element.show('loader');",:complete => "Element.hide('loader');", :href => "return false;" %>

在链接中返回false会禁用它(适用于javascript函数,因此在执行某些操作后它们不会继续链接

答案 2 :(得分:0)

答案 3 :(得分:0)

link_to_remote item_masters_path, {},:onclick => "return false"

=> "<a href=\"#\" onclick=\"return false; new Ajax.Request('/item_masters/index', {asynchronous:true, evalScripts:true, parameters:'authenticity_token=' + encodeURIComponent('kzW0m2Vjg5I9IPeMs3hDMzQUFyyaBgVH35K0AEg77ls=')}); return false;\">/item_masters</a>"