2010-05-18 9 views
14

Bir formdaki onay kutularının bir listesi var. CSS'nin yapılandırılma biçimi nedeniyle, etiket elemanı doğrudan şekillendirilmiştir. Bu, etiketin içindeki onay kutusunu yerleştirmemi gerektirir.Sarma <% = f.check_box%> iç <label>

Ham HTML'de çalışır, etiket metnine tıklarsanız, onay kutusunun durumu değişir. Bununla birlikte, <%= f.check_box %> yardımcı raylarıyla çalışmaz, ancak ilk önce gizli bir giriş etiketi çıkarır. Bana vererek bu raylar budur

<label> 
    <input type="checkbox" ... /> 
    <input type="hidden" ... /> 
    Foo 
</label> 

... ama edilir:

<label> 
    <input type="hidden" ... /> 
    <input type="checkbox" ... /> 
    Foo 
</label> 
Özetle

,
<label> 
    <%= f.check_box :foo %> 
    Foo 
</label> 

bu

ben
istiyorum çıkışı

Yani, etiket davranışı actua değil lly iş :(.

Bunu aşmanın bir yolu var mı?

+0

Yani en.yml olarak

<%= f.label( :foo, "#{f.check_box(:foo)} #{t('helpers.label.foo')}".html_safe ) %> 

bir '= "id"' için, etiket hedefleyen belirtmek yoksa, 'a

+0

Bu doğru, ancak nfm, siparişin hassas olduğunu ve aslında başka bir şekilde çalışmayacağını belirtti. –

cevap

7

Rails, onay kutusunun işaretlenmemiş olmasıyla formun gönderilip gönderilmediğini öğrenmenin bir yolu olması gerektiğinden, gizli girdiyi onay kutusundan önce oluşturur. sırası, onay kutusu işaretlenmişse gizli girişi geçersiz kıldığından, numaralı siparişin hassas olduğunu belirtir. Detaylar için Rails API'a bakın.

Etiket etiketinizdeki onay kutusunu kaydırmak yerine <label for="checkbox_id"> kullanmalısınız.

+1

'un doğru kullanımıyla uyumsuz olduğu bir yer olduğunu söylerim Ben bunu yapmak bitti, ama ben kendi etiketi sağlamak için gereksiz görünüyordu: etiketinde kullanabilirsiniz böylece sadece onay etiketi için. _why_ rağmen bilgi için teşekkürler. –

+2

Twitter Bootstrap bu iç içe geçmiş sözdizimini kullanıyor. – Jan

-3

label etiketinin kullanımı bu şekilde değil. onay kutusu öğesi için bir etiket olarak

<input type="hidden" ... /> <!-- doesn't really matter where these are --> 

<label for="id_of_element">Foo</label> 
<input type="checkbox" id="id_of_element" ... />

Şimdi "Foo" eylemleri ve kontrol edebilir veya işaretini kaldırmak için "Foo" tıklayabilirsiniz: Yerine bu gibi kullanmak.

+9

Bu, "label" etiketini kullanmanın mükemmel kabul edilebilir bir yoludur. Buraya bakın: http://www.w3.org/TR/html401/interact/forms.html#h-17.9.1 özellikle bu: "for = idref [CS]. Bu özellik, başka bir denetim ile tanımlanmış olan etiketi açıkça ilişkilendirir. Mevcut olduğunda, bu özniteliğin değeri, aynı belgedeki başka bir denetimin id özniteliğinin değeriyle aynı olmalıdır.Olmadığı zaman, tanımlanmış olan etiket öğenin içeriğiyle ilişkilendirilir. * * EDIT *: HTML high-horse'ımdan ayrılırım ve bunun Rayların 'label' – Ben

37

Bu benim için çalışıyor:

<%= f.label :foo do %> 
    <%= f.check_box :foo %> 
    Foo 
<% end %> 

oluşturur:

<label for="foo"> 
    <input name="foo" type="hidden" value="0"> 
    <input checked="checked" id="foo" name="foo" type="checkbox" value="1"> 
    Foo 
</label> 
+1

bu sayede, http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-label. Burada açıklandığı gibi otomatik çevirisi kullanmak için herhangi bir fırsat yoktur. – woto

0

Bu O çevirisini içeren kullanılan bir çözümdür.

en: 
    helpers: 
    label: 
     foo: Foo 
İlgili konular