2010-05-18 11 views
14

मेरे पास एक फॉर्म पर चेकबॉक्स की एक सूची है। सीएसएस की संरचना के तरीके के कारण, लेबल तत्व सीधे स्टाइल किया जाता है। यह मुझे टैग के अंदर चेकबॉक्स घोंसला करने की आवश्यकता है।रैपिंग <% = f.check_box%><label>

यह कच्चे HTML में काम करता है, यदि आप लेबल टेक्स्ट पर क्लिक करते हैं, तो चेकबॉक्स की स्थिति में परिवर्तन होता है। यह रेल <%= f.check_box %> सहायक के साथ काम नहीं करता है, हालांकि, क्योंकि यह पहले एक छिपी इनपुट टैग आउटपुट करता है।

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

... लेकिन इस क्या रेल है मुझे दे रही है:

सारांश में,

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

उत्पादन मैं चाहते है

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

तो लेबल व्यवहार actua नहीं है लिली काम :(।

क्या इसके आसपास जाने का कोई तरीका है?

+0

तो में जब 'नेस्टिंग ' एक ''

+0

यह सही है, हालांकि एनएफएम ने नोट किया कि आदेश संवेदनशील है और वास्तव में अन्य तरीकों से काम नहीं करेगा। –

उत्तर

7

रेल चेकबॉक्स से पहले छुपा इनपुट उत्पन्न करता है क्योंकि इसे यह जानने के लिए एक तरीका चाहिए कि फॉर्म चेकबॉक्स के साथ सबमिट किया गया था या नहीं। ऑर्डर संवेदनशील है क्योंकि चेकबॉक्स छुपा इनपुट ओवरराइड करता है अगर इसे चेक किया गया है। विवरण के लिए Rails API देखें।

आपको अपने लेबल टैग में चेकबॉक्स को लपेटने के बजाय <label for="checkbox_id"> का उपयोग करना चाहिए।

+1

के सही उपयोग के साथ असंगत है। यही वह है जो मैं कर रहा था, लेकिन यह खुद को उपलब्ध कराने के लिए अनावश्यक लग रहा था: आईडी को चेकबॉक्स में बस इतना है कि मैं इसे लेबल में उपयोग कर सकता हूं। _why_ पर जानकारी के लिए धन्यवाद। –

+2

ट्विटर बूटस्ट्रैप इस नेस्टेड वाक्यविन्यास का उपयोग कर रहा है। – Jan

-3

label टैग का उपयोग करने का यह तरीका नहीं है। चेकबॉक्स तत्व के लिए एक लेबल के रूप में

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

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

अब "फू" में कार्य करता है, और आप "फू" पर क्लिक करें की जाँच करें या इसे अचयनित करने के लिए कर सकते हैं: इस प्रकार की यह का उपयोग करें।

+9

यह 'लेबल' टैग का उपयोग करने का एक स्वीकार्य तरीका है। यहां देखें: http://www.w3.org/TR/html401/interact/forms.html#h-17.9.1 विशेष रूप से यह: "for = idref [सीएस]। यह विशेषता स्पष्ट रूप से लेबल को किसी अन्य नियंत्रण से परिभाषित करती है वर्तमान में, इस विशेषता का मान उसी दस्तावेज़ में किसी अन्य नियंत्रण की आईडी विशेषता के मान के समान होना चाहिए।अनुपस्थित होने पर, लेबल को परिभाषित किया गया तत्व तत्व की सामग्री से जुड़ा हुआ है। "* संपादित करें *: मैं अपने एचटीएमएल हाई-हॉर्स को बंद कर दूंगा और आपको यह बताऊंगा कि यह एक ऐसा स्थान है जहां रेल 'लेबल' – Ben

37

यह मेरे लिए काम करता है:

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

रेंडर:

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

लगता है इस तरह यहां वर्णित अनुसार स्वचालित लिप्यंतरण का उपयोग करने के लिए कोई विरोध नहीं है http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-label। क्या मैं सही हूँ? खराब अंग्रेजी के लिए क्षमा करें। – woto

0

यह एक समाधान मुझे लगता है कि अनुवाद में शामिल किया जाता है।

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

en.yml

en: 
    helpers: 
    label: 
     foo: Foo 
संबंधित मुद्दे