7

ネストされた要素を使用してラベルタグを作成したいと思います。ラベルヘルパーを使用して、内部htmlをブロックとして渡そうとしていますが、生成されたHTMLが期待どおりに表示されません。ERB:

<span>Span element</span>
<%= label("object", "method") do %>
  <span>Inner span</span>
<% end %>

HTML出力:

<span>Span element</span> 
<span>Inner span</span> 

<label for="object_method">
<span>Span element</span> 
  <span>Inner span</span> 
</label>

<%%>マークアップを使用して内部HTMLを渡すと、出力は次のようになります
。ERB:

<span>Span element</span>
<%= label("object", "method") do %>
  <% raw '<span>Inner span</span>' %>
<% end %>

HTML出力:

<span>Span element</span>
<label for="object_method">
  <span>Inner span</span>
</label>

ActionViewラベルヘルパーの間違いなのかバグなのか疑問に思います。他のヘルパーの場合、ブロックパスは正常に機能します。

ありがとう、Michał

4

3 に答える 3

13

私の理解では、この場合はlabel_tagヘルパーを使用する必要があります。

<%= label_tag "my_label_name" do %>
  <span>Inner span</span>
<% end %>

これは、フォームラベルヘルパーが(モデルオブジェクト属性を使用して)「for」属性を入力しますが、ネストされた要素を使用する必要がないためです。

内部コンテンツをラップする(自己閉鎖ではなく)オープンラベルタグがある場合、ラベルは明らかにネストされたコンテンツに関連付けられているため、「for」属性は必要ありません(これは暗黙的な関連付けと呼ばれます)。

したがって、これは予想される動作です。Railsチームが意図的にこのように構築したようです。

于 2011-05-22T14:31:01.553 に答える
4

スコット・ロウの答えは正しいですが、私はそれをさらに一歩進めます...これにRailslabel_tagを使用する必要さえありません。次のように生のhtmlを使用してください。

<label>
  <span>Inner span</span>
</label>

ラベルをフォーム要素(ラジオボタンなど)に関連付ける場合:

<label>
  <%= f.radio_button :approval_state, 'R' %>
  Rejected
</label>
于 2012-06-11T04:21:01.663 に答える
1

Rails 3.2.11では、これは私のために働いています:

<span>Span element</span>
<%= label :item, :method do %>
  <span>Inner span</span>
<% end %>

結果:

<span>Span element</span>
<label for="item_method">
  <span>Inner span</span>
</label>
于 2013-03-02T12:32:42.877 に答える