2016-07-10 41 views
6

Chcę utworzyć html tak:Pug/Jade - wejście jest elementem samozamykającym: <input/>, ale zawiera treść zagnieżdżoną?

<label class="radio-inline"> 
    <input type="radio" name="hidden" checked="" value="Visible"> Visible 
</label> 

Mops/Jade

label.radio-inline 
    input(type="radio", name="hidden", value="0", checked="") Visible 

ale pojawia się błąd:

input is a self closing element: but contains nested content.

Co to oznacza? Jak mogę to naprawić?

+3

'' element nie może zawierać niczego. –

Odpowiedz

7

Istnieje wiele sposobów, aby to zrobić przy użyciu Jade/Pug. Pierwszym sposobem jest użycie char rury (co wymaga nowej linii):

input 
    | text 

Drugim sposobem jest użycie interpolacji Tag (i można zatrzymać się na tej samej linii):

#[input] text 

więc alternatywą Jethro odpowiedź byłaby:

label.radio-inline 
    #[input(type='radio', name='hidden', value=0, checked='')] Visible 

pamiętać, że można jeszcze zrobić:

label #[input] text 

które będą generować:

<label> 
    <input/> text 
</label> 
5

Musisz do niego tak:

label.radio-inline 
    input(type='radio', name='hidden', value=0, checked='') 
    | Visible 

Umieszczenie Visible na tej samej linii co input sprawia, mops interpretować ją jako wewnętrzną HTML elementu input.

1

wierzę, że to nonsens, aby umieścić input wewnątrz znacznika label, czy nie? można po prostu zrobić

label(for="ya") Visible 
input(id="ya", type="radio", name="hidden", value=0, checked="") 

który daje doskonale oznaczony przycisk radiowy w zgodzie z nowoczesną web standards.

+2

Może, chociaż nie jest to wymaganie PO. Zwróć też uwagę, że twój link jednoznacznie stwierdza "Wskazówka: Etykieta może być związana z elementem za pomocą atrybutu" for "lub przez umieszczenie elementu wewnątrz elementu

+0

Dość uczciwi, przeoczyłem to. Dzięki! Z semantycznej perspektywy nie użyłbym tego. – Flaudre

+0

Nadal dostaję ten błąd 'input # first_name.form-control.input-sm.floatlabel (type =" text ", name =" first_name ", placeholder =" First Name ")' –