【问题标题】:How to show/hide a repeater table row, which the user clicked如何显示/隐藏用户单击的中继器表行
【发布时间】:2014-09-22 10:21:41
【问题描述】:

我有一个带有表格行的中继器控件,用于显示从数据库中获取的项目。

这是我的代码:

   <asp:Repeater ID="Repeater1" runat="server">
       <HeaderTemplate>
           <table id="grid">
               <thead>
                   <tr>
                       <th>PNo</th>
                       <th>Start Date</th>
                       <th>End Date</th>
                       ...
                   </tr>
               </thead>
               <tbody>
  </HeaderTemplate>
  <ItemTemplate>
      <tr>
          <td><%#Eval("PNo") %></td>
          <td><%#Eval("startDate") %></td>
          <td><%#Eval("endDate") %></td>
          ...                  
      </tr>
      <tr> --------> want to hide/show this zone of the table
          <td id="tdHidden" colspan="10" class="styleHiddenDiv">
            <div id="divHidden" class="hiddenRow">
                    some content..
           </div>
          </td>
      </tr> -----------
      <tr>
          <td colspan="10">
                  <span id="spn" onclick="showHide('tdHidden');">More..</span>
          </td>
      </tr>
  </ItemTemplate>
       <FooterTemplate>
           </tbody>
           </table>
       </FooterTemplate>
   </asp:Repeater>

我从数据库中获取 14 条记录。根据表格,这里每条记录有3行(tr)。

我想隐藏/显示表格中的第二个 tr。我是说;仅单击行跨越(更多)之前的 tr。

希望我能解释一下..

你能帮我弄清楚吗?

【问题讨论】:

    标签: jquery asp.net html-table row repeater


    【解决方案1】:

    您已标记为 jquery,因此已标记为 jquery 解决方案。这是使用 jquery toggle 的方法。

    在中继器中为您的 span 元素添加一个类名并移除 onclick 事件。

     <tr>
         <td colspan="10">
               <span id="spn" class="more">More..</span>
         </td>
     </tr>
    

    还有你的 jquery 函数

    $(function () {
        $('.more').on('click', function (e) {
           var elem = $(this).closest('tr').prev();
           elem.toggle();
        });
    });
    

    这是工作的Demo

    更新:如果您想在页面初始加载时隐藏所有可切换行,请使用以下代码

    $(function () {
    
        // hide all the toggable rows on page load
        $('.more').closest('tr').prev().css('display', 'none');
    
        $('.more').on('click', function (e) {
           var elem = $(this).closest('tr').prev();
           elem.toggle();
        });
    });
    

    或者如果您不想使用脚本来处理这个问题,那么您可以通过为可切换行设置style="display: none" 来使用css 来完成,原始代码应该可以正常工作。所以你的tr 会变成

    <tr style="display: none">
         <td id="tdHidden" colspan="10" class="styleHiddenDiv">
              <div id="divHidden" class="hiddenRow">
                  some content..
              </div>
         </td>
    </tr>
    

    我已根据您的新要求更新了原来的Demo

    【讨论】:

    • 它运作良好。非常感谢:)
    • @perlynsparks 很高兴为您提供帮助。如果在切换行时想要一点动画,可以添加elem.toggle('slow');
    • 对不起丹尼斯,再问一个问题;我希望在页面首次打开时默认隐藏所有切换 trs。所以我添加了 $('.styleHiddenDiv').hide();到您的 jquery 的顶部。但没有奏效。你认为我在哪里做错了?再次感谢你..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2014-04-24
    • 2018-07-09
    相关资源
    最近更新 更多