【问题标题】:Rails and bootstrap - Add HTML tags to a submit button textRails 和 bootstrap - 将 HTML 标记添加到提交按钮文本
【发布时间】:2018-08-13 06:34:45
【问题描述】:

我有一个使用 ajax 的喜欢/不喜欢按钮的表单:

= form_for like, :html => { :method => :delete}, :remote => true do |f|
= f.submit pluralize(@video.likes.count, 'like'), :class => "btn btn-warning btn-mini", "data-disable-with"=> "Just a moment..."

表单完美运行。

我想在提交按钮的文本前添加一个图标。添加图标的haml代码如下(twitter bootstrap):

%i.icon-heart.icon-white

有没有办法将此html添加到按钮?我尝试将其添加为纯 html,但 Rails 将其呈现为文本。

更新

我已经设法将提交按钮封装在一个包含图标和适当样式的跨度类中。我现在需要删除按钮上的所有样式...

%span.btn.btn-danger.btn-mini
  %i.icon-heart.icon-white
  = f.submit pluralize(@video.likes.count, 'like')

【问题讨论】:

    标签: ruby-on-rails twitter-bootstrap


    【解决方案1】:

    感谢 ismaelga,我找到了this SO question

    这是解决方案:

    <%= button_tag(type: 'submit', class: "btn btn-primary") do %>
     <i class="icon-ok icon-white"></i> Save
    <% end %>
    

    【讨论】:

    • 即使这个解决方案有效,我也不喜欢它,因为我再也看不到 f 变量了 :) 感觉就像突然提交了一个表单......
    • 这不应该是公认的答案。问题是将 html 添加到 form_for 表单构建器助手的按钮“文本”部分,而不是将您的步骤反转到手动 button_tag 视图助手方法中。你应该使用f.button type: :button, class: 'your_classes', { haml code here }
    【解决方案2】:

    问题本身的公认答案会起作用,但更像是一个补丁,而不是保持代码风格清晰一致的完美解决方案。它回溯到使用标准和手动查看方法:#button_tag。我倾向于避免使用#submit_tag、#form_tag、#input_tag ... 等手动方法,因为它们与支持的模型或表单模型本身无关,您需要手动对它们执行所有操作。即使提交与f. 无关,form_for 中的每个输入都喜欢例如f.input ...,它与风格、代码可读性和良好的编程实践有关。此代码运行良好(form_for 和 simple_form):

    = f.button :button, type: :submit, class: 'class1 class2 ... classN' do
        = 'button call to action text'
        %i.fa.fa-download.ml5 // => haml icon as requested
    

    希望它能帮助其他人像我一样尝试避免使用_tag 方法。

    【讨论】:

      【解决方案3】:

      另一个选项可能是 button 代替 submit

      请参阅 Rails 文档FormBuilder#button

      = f.button :class => "btn btn-warning btn-mini" do
        %i.icon-heart.icon-white
          = pluralize(@video.likes.count, 'like')
      

      【讨论】:

        【解决方案4】:

        试试这个。我还没有测试过,但我认为可以做这样的事情。

        = f.submit :class => "btn btn-warning btn-mini", "data-disable-with"=> "Just a moment..." do
          %i.icon-heart.icon-white
          = pluralize(@video.likes.count, 'like')
        end
        

        因此,如果您使用 simple_form,这是可能的。对不起。

        所以再试一次

        = f.submit "#{pluralize(@video.likes.count, 'like')} <i class='icon-heart icon-white'/>".html_safe, :class => "btn btn-warning btn-mini", "data-disable-with"=> "Just a moment..."
        

        【讨论】:

        • 我尝试安装 SimpleForm 并使用您的第一个答案,但它不起作用。你的第二个也没有..
        • 啊!感谢您的回答,我找到了新的关键字来搜索 Google! this SO question 真的很有帮助!
        • 我也回答了这个问题 :) 希望你能找到解决办法
        • 谢谢你,我确实找到了答案 :) 这个问题困扰了我一段时间!
        • f.submit 不起作用,您需要 f.button 类型为 submit 和一个块作为最后一个参数来输出自定义 haml/html
        【解决方案5】:

        贾斯汀 D 的回答也帮助了我。如果您从 Google 来到这里,并且正在寻找 Slim 实现,您可以这样做:

        = button_tag(type: 'submit', class: 'btn btn-default') do
            span.glyphicon.glyphicon-floppy-disk>
            | Save
        end
        

        Slim 用户会认识到&gt; 的必要性。

        截至 2014 年 9 月 24 日,这对我使用 Rails 4.1.5、Ruby 2.1.2 和 bootstrap-sass 3.2 有效。

        【讨论】:

        • 这为我节省了数小时的挫败感。 +1!
        【解决方案6】:

        解决方案

        = button_to('Add', line_item_path, method: :post , class: "btn btn-warning btn-lg" , params: { param1: 'value1',  param2: 'value2' })
        

        http://qiita.com/tomomomo1217/items/a5f790c31670587e2d87

        How to place an image inside of a link?

        【讨论】:

          【解决方案7】:

          请尝试以下代码。有效

          <%= f.submit :class => "btn btn-success btn-mini" %>
          

          【讨论】:

          • 添加一些解释会很棒。
          • 您的答案不包含提交标记中的 html,因此不包含图标。
          • 这不能回答问题
          猜你喜欢
          • 1970-01-01
          • 2020-06-24
          • 2021-05-27
          • 2017-05-03
          • 1970-01-01
          • 2021-08-15
          • 2016-10-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多