Jquery表行扩展

时间:2014-04-17 13:07:25

标签: jquery

您好我正在尝试展开并折叠从数据库填充的表中的行。 但是当我尝试展开第二行时,第一行会展开,所以第二行和第三行不会展开。

JS:

<script language="javascript" type="text/javascript">
    $('.showhide').click(function () {
        $(this).parents("tr").next().slideToggle();
        return false;
    });
</script>
<script language="javascript" type="text/javascript">
function toggleTable() {
    if (document.getElementById("hide").style.display == "none") {
        document.getElementById("hide").style.display = "";
        document.getElementById("show").value = "-";
    }
    else {
        document.getElementById("hide").style.display = "none";
        document.getElementById("show").value = "+";
    }
}
</script>

HTML:

@{
ViewBag.Title = "Verworpen Voorstellen";
}
@if (Model.Any())
{
 <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Titel)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Student)
            </th>

            <th>@Html.DisplayNameFor(model => model.Promotor)</th>

            <th>OD</th>

            <th>@Html.DisplayNameFor(model => model.Status)</th>

            <th>@Html.DisplayNameFor(model => model.CreatieDatum)</th>
            <th></th>
        </tr>

        @foreach (var item in Model)
        {
            if (item.Student != null && item.Promotor != null)
            {
                <tr>

                    <td>
                        @String.Format("{0}", item.Titel)
                    </td>
                    <td>
                        @String.Format("{0} {1}", item.Student.Voornaam,     item.Student.Naam)
                    </td>
                    <td>
                        @Html.ActionLink(@String.Format("{0} {1}", item.Promotor.Voornaam, item.Promotor.Naam), "PromotorDetails", item.Promotor)
                    </td>

                    <td>
                        @if (item.OnderzoeksDomein1 != null && item.OnderzoeksDomein2 == null)
                        {
                            @String.Format("{0}", item.OnderzoeksDomein1.OdNaam)
                        }
                        else
                        {
                            if (item.OnderzoeksDomein1 != null && item.OnderzoeksDomein2 != null)
                            {
                                @String.Format("{0}, {1}", item.OnderzoeksDomein1.OdNaam, item.OnderzoeksDomein2.OdNaam)
                            }
                            else
                            {
                                @String.Format("-")
                            }
                        }
                    </td>
                    <td>
                        @String.Format("{0}", item.BPStatus.ToString())
                    </td>

                    <td>
                        @Html.DisplayFor(modelItem => item.CreatieDatum)
                    </td>
                    <td>
                        <input type="button" id="show" value="+" onclick="toggleTable();" style="width:auto;" class="showhide"/>
                    </td>

                </tr>
            <tr id="hide" style="display: none">
                    <td>
                    </td>
                    <td colspan="6">
                        @String.Format("{0} {1}", item.Student.Voornaam, item.Student.Naam)
                    </td>

            </tr>
            }
        }

    </table>

如果我从第二行按下按钮,第一行的额外信息将扩展而不是第二行的信息

1 个答案:

答案 0 :(得分:0)

解决这个问题的最简单方法是为每一行提供一个唯一的ID,例如“hide-1”和“hide-2”等。

这样的事情:

<td>
    <input type="button" id="show-@item.Id" value="+" onclick="toggleTable(@item.Id);" style="width:auto;" class="showhide"/>
</td>

...

<tr id="hide-@item.Id" style="display: none">
    <td>
    </td>
    <td colspan="6">
         @String.Format("{0} {1}", item.Student.Voornaam, item.Student.Naam)
    </td>

</tr>

然后:

<script type="text/javascript">
    function toggleTable(Id) {
        if (document.getElementById("hide-"+Id).style.display == "none") {
            document.getElementById("hide-"+Id).style.display = "";
            document.getElementById("show-"+Id).value = "-";
        }
        else {
            document.getElementById("hide-"+Id).style.display = "none";
            document.getElementById("show-"+Id).value = "+";
        }
    }
</script>

@ item.Id将是该特定对象的唯一ID,因此您可以区分彼此的行。