2012-08-06 12 views
20

Wiem, że można powiązać etykietę z danymi wejściowymi przy użyciu atrybutów for i id. Czy możesz jednak użyć klasy, a nie id? DziękiSkojarzyć etykietę z danymi wejściowymi z klasą id id?

<label for="rooms">Number of rooms</label> 
<select id="rooms"> 
        <option value="1">1</option> 
        <option value="2">2</option> 
        <option value="3">3</option> 
        <option value="4">4</option> 
</select> 

Odpowiedz

38

Klasy nie są unikalne (możesz mieć wiele elementów z tą samą klasą), więc nie.

Jeśli chcesz przypisać etykietę do wejścia bez użycia identyfikatora, można niejawnie przypisać go poprzez włączenie powiedział wejście wewnątrz etykiety:

<label>Number of rooms 
    <select name="rooms"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
     <option value="4">4</option> 
    </select> 
</label> 
+2

Obsługa tego nie jest tak dobra, jak w przypadku atrybutu 'for'. (Chociaż to stary IE jest głównym problemem i może być wystarczająco martwy, że to nie ma znaczenia teraz). – Quentin

+0

Nice - Nie wiedziałem, że mogę zagnieździć kontrolkę w etykiecie – freefaller

+0

@Quentin: Aye, chyba że robi jakąś zakręconą aplikację lokalną, gdzie środowisko korzysta tylko z IE6, nie powinno być problemu z robieniem tego . Osoby, które korzystają z IE6 zasługują na to (IMHO), aby zobaczyć uszkodzone strony internetowe, z dodatkowym powiadomieniem, aby je zaktualizować. A jeśli nie chcą, możesz sobie wyobrazić, co mogą zrobić ze sobą. –

3

Nie, nie możesz. Jedynym atrybutem, którego możesz użyć, jest atrybut id.

Nie ma sensu używać klasy (która opisuje grupę powiązanych elementów), ponieważ etykieta może być skojarzona tylko z dokładnie jednym formantem formularza.

4

Nie, nie można użyć elementu class elementu, ponieważ ta sama klasa może być używana przez wiele elementów - w takim przypadku, dla którego elementu miałaby być label?

3

Oto przykład, kiedy nie chcą korzystać z identyfikatora lub gniazdem sterowania:

  • tworzę aplikację backbone.js który używa szablonów. Ponieważ szablon można duplikować, ważne jest, aby nie używać identyfikatorów, ponieważ utworzy on wiele elementów w DOM z tym samym identyfikatorem.

  • Używam również Bootstrap, który zaprezentuje kontrolkę w inny (i niepożądany) sposób, jeśli jest zapakowany wewnątrz elementu <label>.

W tym miejscu jedynym rozwiązaniem, jakie mogę znaleźć, jest owinięcie elementu sterującego i wyszukanie domyślnego kodu CSS w celu uzyskania pożądanego wyniku. Jeśli ktoś ma bardziej eleganckie rozwiązanie, należy zadzwonić.