Rails:禁用link_to链接不起作用但隐藏link_to工作

Posted

技术标签:

【中文标题】Rails:禁用link_to链接不起作用但隐藏link_to工作【英文标题】:Rails: Disabling link_to link not working but hidden link_to working 【发布时间】:2016-02-22 14:26:06 【问题描述】:

link_to 方法没有被禁用:-

<%= link_to edit_cabinet_path(object), remote: true, disabled: true do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %>  

但如果我喜欢下面的隐藏链接

<%= link_to edit_cabinet_path(object), remote: true, style: "display:none;" do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %>  

现在的问题是如何使用块禁用这种类型的链接,以及第二个代码有效而第一个无效的原因是什么。

【问题讨论】:

您的第一个链接无效,因为我们不能在 html 链接中使用 disabled: true。您的第二个代码将隐藏您的链接,因为您设置了display: none css 属性,所以它不会禁用链接而是隐藏它。 【参考方案1】:

实际上link_to没有disabled属性,只有button_to标签。

更多信息请参考这里:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

在这种情况下,您可能想使用link_to_if,请查看:http://apidock.com/rails/v4.2.1/ActionView/Helpers/UrlHelper/link_to_if

【讨论】:

如果是这样,那么为什么此代码有效 “此代码有效”是什么意思?它是隐藏在页面中还是您可以看到但单击时什么也不做? 您提到了禁用的属性。不适用于 link_to 标记,仅适用于 button_to 标记,但我评论中上面提到的 link_to 方法具有禁用的属性。在职的。链接不隐藏只是被禁用了。 不知道怎么弄?但我认为link_to_if 是你需要的:) 请看这里:apidock.com/rails/v4.2.1/ActionView/Helpers/UrlHelper/…【参考方案2】:

您可能正在寻找link_to_iflink_to_if 使您的链接只有在您的条件通过时才可点击。

你的代码应该是这样的:

<%= link_to_if false, edit_cabinet_path(object), remote: true do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %> 

要使其动态化,您可以调用满足该链接是激活还是非激活的条件,例如:

<%= link_to_if cabinate.active?, 
               "<span class='glyphicon glyphicon-pencil'></span>".html_safe, 
               edit_cabinet_path(object), remote: true %>

希望这能回答你的问题..

【讨论】:

【参考方案3】:

link_to_if 没有按预期工作。它仅在您的条件为 false 作为后备时呈现给定块。https://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if#1589-Passing-a-block-does-not-behave-as-expected

在我的例子中,我为给定的块创建了一个 Proc

<%link_block = Proc.new%>
<span class="glyphicon glyphicon-pencil"></span>
<%%>
<%if condition?%>
<%= link_to edit_cabinet_path(object), remote: true, disabled: true, &link_block%>
<%else%>
<%link_block.call%>
<%end%>

【讨论】:

【参考方案4】:

我写了一些简单的 JS 让你在 link_to 方法中添加disabled: true

  //this allows us to use html disabled attribute in rails
  //to prevent clicking on a disabled link from doing anything
  $('a[disabled]').click(function(e)
    e.stopImmediatePropagation()
    e.preventDefault();
  );

【讨论】:

以上是关于Rails:禁用link_to链接不起作用但隐藏link_to工作的主要内容,如果未能解决你的问题,请参考以下文章

rails中的文件下载链接

link_to 和 :hover 在我的 Rails 应用程序上不起作用

html_safe 在 rails 的 link_to 标题属性中不起作用

使用方法对 link_to 的 ajax 请求:在禁用 javascript 的情况下放入 rails

提交后禁用Rails中的link_to按钮以防止重复提交

在 Rails、Coffeescript 中首次单击后禁用链接