Схлопывание Bootstrap внутри таблицы/между строками таблицы не работает

У меня есть вопрос относительно функции сворачивания Bootstrap. Я почти уверен, что упускаю из виду что-то совершенно очевидное или легко исправимое, но я много гуглил и играл с кодом, но безуспешно.

У меня есть страница «настройки учетной записи», где вся информация об учетной записи пользователя отображается в табличном формате, при этом ячейки таблицы последнего столбца таблицы всегда содержат кнопку «редактировать» для редактирования этой информации. Когда люди нажимают «изменить», форма редактирования раскрывается прямо под этой строкой таблицы.

Я следовал схеме на http://twitter.github.com/bootstrap/javascript.html#collapse , сама функция сворачивания работает нормально, но проблема в том, что каждая форма всегда расширяется над моей таблицей, независимо от того, на какую кнопку редактирования я нажимаю. Я сделал скриншот, как это выглядит. http://imageshack.us/photo/my-images/834/problemyn.png/ Вместо того, чтобы быть над всей таблицей, я хочу, чтобы она расширялась прямо под определенной строкой, сдвигая нижние строки вниз.

Вот мой код:

<table class="table">
<tbody>
    <tr>
        <td>Username</td>
        <td><%= @user.name %></td>
        <td><button class="btn btn-danger" data-toggle="collapse" data-target="#username">Edit</button></td>
    </tr>
    <div id="username" class="collapse">
        <div class="row">
            <div class="span6 offset3">
            <%= form_for(@user) do |form| %>
            <%= render 'shared/error_messages', object: form.object %>
                <%= form.label :name, "Change Username" %>
                <%= form.text_field :name %>
                <%= form.submit "Save changes", class: "btn btn-primary" %>
            <% end %>
            </div>
        </div>
    </div>
    <tr>
        <td>Email</td>
        <td><%= @user.email %></td>
        <td><button class="btn btn-danger" data-toggle="collapse" data-target="#email">Edit</button></td>
    </tr>
    <div id="email" class="collapse">
        <div class="row">
            <div class="span6 offset3">
            <%= form_for(@user) do |form| %>
                <%= render 'shared/error_messages', object: form.object %>
                <%= form.label :email, "Change Email" %>
                <%= form.text_field :email %>
                <%= form.submit "Save changes", class: "btn btn-primary" %>
            <% end %>
            </div>
        </div>
    </div>
    <tr>
        <td>Password</td>
        <td>Last time updated:&nbsp;<%= @user.updated_at %></td>
        <td><button class="btn btn-danger" data-toggle="collapse" data-target="#password">Edit</button></td>
    </tr>
    <div id="password" class="collapse">
        <div class="row">
            <div class="span6 offset3">
            <%= form_for(@user) do |form| %>
                <%= render 'shared/error_messages', object: form.object %>
                <%= form.label :password, "Change Password" %>
                <%= form.text_field :password %>
                <%= form.label :password_confirmation, "Confirm Password" %>
                <%= form.password_field :password_confirmation %>
                <%= form.submit "Save changes", class: "btn btn-primary" %>
            <% end %>
            </div>
        </div>
    </div>
    <tr>
        <td>Language</td>
        <td>English</td>
        <td><button class="btn btn-danger" data-toggle="collapse" data-target="#language">Edit</button></td>
    </tr>
    <div id="language" class="collapse">
        <div class="row">
            <div class="span6 offset3">
            <!-- code for language form -->
            </div>
        </div>
    </div>
    <tr>
        <td>Avatar</td>
        <td><%= avatar_status %></td>
        <td><button class="btn btn-danger" data-toggle="collapse" data-target="#demo">Edit</button></td>
    </tr>
    <div id="demo" class="collapse">
        <div class="row">
            <div class="span6 offset3">
            <%= form_for(@user) do |form| %>
            <%= form.label :avatar %>
            <%= form.file_field :avatar %>

            <%= form.submit "Add avatar", class: "btn btn-primary" %>
            <% end %>
            </div>
        </div>
    </div>
</tbody>
</table>

person rails_has_elegance    schedule 17.05.2012    source источник
comment
Изображение теперь является мертвой ссылкой, что делает вопрос менее ясным.   -  person Brian Tompsett - 汤莱恩    schedule 01.12.2016


Ответы (2)


Привет, извините, у меня не будет удовлетворительного ответа. Не допускается иметь ничего, кроме элементов <tr>, в качестве потомков <tbody>, поэтому ваш HTML недействителен. Это то, что вызывает глючное поведение. Лучше всего обернуть каждую часть формы в новый элемент table.

person Tinco    schedule 30.05.2012
comment
Ну, я думаю, что это на самом деле очень удовлетворительный ответ! Теперь я понимаю, почему он так сильно глючит. Попробую исправить так, как вы сказали, с индивидуальной таблицей для каждого тр. Спасибо!! - person rails_has_elegance; 30.05.2012

Чтобы свернуть строку таблицы, вы должны написать дополнительный css для свернутой строки:

table .collapse.in {
    display: table-row !important;
}

Это устранит проблему с отображением после расширения строки.

person Qier LU    schedule 21.02.2014