单选按钮的标签也可以选择吗?

时间:2010-01-09 07:13:28

标签: html ruby-on-rails ruby web-applications

根据(有点官方)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 %>

但是,我仍然无法让它发挥作用。我使用的是rails 2.3.5和ruby 1.8.7。

感谢阅读,也许还有帮助!

6 个答案:

答案 0 :(得分:10)

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

您可以使用Rails' FormHelper's label method使用“值”键将标签正确点击到params。

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" %>

希望有所帮助:)

答案 1 :(得分:6)

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

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

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

在Rails中,label助手可以接受一个块,所以你可以这样做:

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

根本不了解rails,HTML要求很简单:您必须构建这样的标记:

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

所以,首先,检查您的HTML,在您的示例中,您在...中输入了缺少的名称:“bet_type type =”radio“...

其次,for =“”总是指向字段的id。

现在你有了一个bet_type!

字段的可点击标签

希望它有所帮助!

答案 4 :(得分:1)

我正在使用Rails 5和嵌套属性,因此无法对输入字段(单选按钮)的DOM ID进行硬编码。解决方案是使用form.label的value:属性

<%= 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相匹配。

答案 5 :(得分:0)

Woops!对不起。我发现这个错误有点不诚实。

我手工编写了这篇文章的代码......没有复制粘贴。为了清楚起见,我重命名了一些我使用的值,因为我运行的代码有点乱(显然不正确)。

所以,当Gaby让我为这些代码块获取一些输出时,我把它们放在我看来并且瞧!选择各自单选按钮的标签!但为什么呢?!

嗯,这就是事情。看一下输出,我意识到我的原始代码没有在html中生成一致的input.id和label.for值。它看起来像这样:

<%= 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 +“_”+值)生成input.id,而标签标记方法从它的object_name生成label.for。 当这两者相等时,你会得到一个选择标签。

我希望这一发现可以帮助其他人走出困境。

很抱歉让你的齿轮磨得无用!