根据(有点官方)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。
感谢阅读,也许还有帮助!
答案 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 %> <%= 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。 当这两者相等时,你会得到一个选择标签。
我希望这一发现可以帮助其他人走出困境。
很抱歉让你的齿轮磨得无用!