代码之家  ›  专栏  ›  技术社区  ›  t-mart Mike Lewis

是否也让单选按钮的标签进行选择?

  •  7
  • t-mart Mike Lewis  · 技术社区  · 15 年前

    根据(有些正式) this guide ,我可以制作一个单选按钮的标签,也可以为该单选按钮进行选择。他们说,

    始终为每个复选框和单选按钮使用标签。他们 将文本与特定选项关联 提供更大的可点击区域 .

    不幸的是,我无法获得表单的此功能。这是我的代码:

    <% form_for(@bet) do |f| %>
      <%= f.label :bet_type %>
      <%= f.radio_button :bet_type, "moneyline" %>
      <%= f.label :bet_type_moneyline, "Moneyline" %>
      <%= f.radio_button :bet_type, "spread" %>
      <%= f.label :bet_type_spread, "Spread" %>
    <% end %>
    

    我也尝试过(因为这是使用formtaghelper而不是formhelper的示例方法):

    <% form_for(@bet) do |f| %>
      <%= radio_button_tag :bet_type, "moneyline" %>
      <%= label_tag :bet_type_moneyline, "Moneyline" %>
      <%= radio_button_tag :bet_type, "spread" %>
      <%= label_tag :bet_type_spread, "Spread" %>
    <% end %>
    

    但是,我还是不能让它工作。我使用的是Rails2.3.5和Ruby1.8.7。

    谢谢你的阅读,也许还有帮助!

    6 回复  |  直到 7 年前
        1
  •  6
  •   James Brennan    13 年前

    对单选按钮执行此操作的一个简单方法是将输入标记放在标签内,如下所示:

    <label>
      <input />
      This is an input!
    </label>
    

    这是实现目标的有效方法。

    在轨道上 label 帮助程序可以接受块,因此可以执行以下操作:

    <%= f.label :moneyline do %>
      <%= f.radio_button :bet_type, "moneyline" %>
      "Moneyline"
    <% end %>
    
        2
  •  9
  •   user3309558    11 年前

    你可以找到一个解决方案,但它可以帮助其他人。我正在使用Rails 4+。

    您可以使用 Rails' FormHelper's label method 使用“value”键输入参数。

    label(:post, :privacy, "Public Post", value: "public")
    # => <label for="post_privacy_public">Public Post</label>
    

    对于您的代码,它应该是

    <%= f.radio_button :bet_type, "moneyline" %>
    <%= f.label :bet_type, "Moneyline", value: "moneyline" %>
    <%= f.radio_button :bet_type, "spread" %>
    <%= f.label :bet_type, "Spread", value: "spread" %>
    

    希望有帮助:)

        3
  •  4
  •   T. Weston Kendall    13 年前
    <%= f.radio_button :bet_type, "moneyline" %>
    <%= f.label :moneyline, "Moneyline", :for => "bet_type_moneyline" %>
    
        4
  •  3
  •   mistalaba    15 年前

    完全不了解Rails,HTML要求很容易:您必须像这样构造标记:

    <input id="bet_type_moneyline" name="bet_type" type="radio" value="moneyline">
    <label for="bet_type_moneyline">Moneyline</label>
    

    因此,首先,检查您的HTML,在您的示例中,您在…name=“bet_type=“radio”…

    其次,for=“”始终指向字段的ID。

    现在,您有了一个可点击的标签,用于字段赌注类型!

    希望有帮助!

        5
  •  1
  •   Vikram Bahl    7 年前

    我使用的是rails 5和嵌套属性,因此不可能硬编码输入字段(单选按钮)的dom id。解决方案是使用form.label的value:attribute

    <%= form.radio_button :question_option_id, ques_opt.id %>&nbsp;<%= form.label :question_option_id, ques_opt.option_text.humanize, value: ques_opt.id %>
    

    Rails自动为标签生成for:属性。只需检查标签并确保标签的for:属性与单选按钮的ID匹配。

        6
  •  0
  •   t-mart Mike Lewis    15 年前

    汪汪!很抱歉。我发现这个错误有点不诚实。

    我用手写了这篇文章的代码…没有复制粘贴。为了保持清晰,我重新命名了一些我使用的值,因为我运行的代码有点混乱(显然是不正确的)。

    所以,当盖比要求我为这些代码块获得一些输出时,我把它们放在我的视图中,瞧!选择各自单选按钮的标签!但是为什么呢?!

    好吧,事情是这样的。查看输出,我发现我的原始代码没有为HTML中的值生成一致的input.id和label.看起来像这样:

    <%= f.radio_button :bet_type, "moneyline" %>
    <%= f.label :moneyline, "Moneyline" %>
    

    这就产生了:

     <input id="bet_type_moneyline" name="bet_type type="radio" value="moneyline" />
     <label for="moneyline">Moneyline</label>
    

    看到input.id和label.for有什么不同吗?

    只有当我运行我的 问题 我说得对吗?

    它似乎是这样工作的:单选按钮标记方法从它的(object_name+“uu”+value)中生成input.id,而label标记方法从它的object_name中生成label.for。 当这两个相等时,你会得到一个选择标签。

    我希望这个发现能帮助其他人。

    不好意思让你的齿轮也无缘无故地磨了!