【问题标题】:What would be the best way to dynamically add a set of rows to a table using JQuery?使用 JQuery 向表中动态添加一组行的最佳方法是什么?
【发布时间】:2010-04-08 18:02:55
【问题描述】:

我有一个使用 MVC 的下表,它显示了用户拥有的项目数。

 <table border = "1" id="tblItems">
            <%
                var itemnum = 1;
                foreach (var item in Model.Items)
            {%>

                <tr>
                    <td colspan="2" bgcolor="Silver"><strong>Item#<%=itemnum%></strong></td>
                    <td><%=Html.ActionLink("Delete", "DeleteItem", "Item", new { id = item.ID })%></td>

                </tr>
                <tr>
                    <td><strong>Name:</strong></td>
                    <td><%=Html.TextBox("ItemName_" + itemnum, item.Name)%></td>
                </tr>
                <tr>
                    <td><strong>Description:</strong></td>
                    <td><%=Html.TextBox("ItemDescription_" + itemnum, item.Description)%></td>
                </tr>


                <%itemnum++;
           } %>
        </table>

我将有一个按钮来添加新项目,它会动态添加相同的结构。

另外,我如何为每个输入控件分配一个唯一的 ID? 在我的控制器中,我需要遍历项目总数并通过 Request.Form.Get("Name_" + i); 从每个输入控件中获取一个值;

关于使用 JQuery 执行此操作的最佳方式有什么想法吗?

感谢所有建议!

【问题讨论】:

    标签: javascript jquery asp.net-mvc


    【解决方案1】:

    你可以使用jQuery复制最后一行:

    $("#tblItems tr:last").clone().appendTo("#tblItems");
    

    但这会延续您的inputs,并使用与最后一行相同的名称,这不是一个很好的开箱即用解决方案。您可以添加一些 extensive jQuery manipulation 来重命名输入,或者正如 Dan Diplo 所指出的,有一些 jQuery 扩展可以为您做到这一点。

    【讨论】:

      【解决方案2】:

      用户(然后是一个大数字):)

      看看 jqote(一个 jquery 模板库)。非常小,可以完全按照您上面提到的那样做。事实上,这里有一个小例子,可以满足您的需求:

      http://hackingon.net/post/jQuery-client-side-templates-with-jqote-and-AspNet-MVC.aspx

      祝你好运 - 我使用它取得了巨大的成功。

      吉姆

      【讨论】:

      • 如何为每个输入控件分配一个唯一的 ID?在我的控制器中,我需要遍历项目总数并通过 Request.Form.Get("Name_" + i); 从每个输入控件中获取一个值;
      • 用户,在 jqote 模板中,有两个“变量”,分别是系统范围的名称 i 和 j。变量 i 与正在循环的任何集合相关,变量 j 与模板调用相关。这些是每个页面请求的持久性(即在后台自动递增,直到页面被导航离开)。所以你可以在 id="cliemtRow" 等的 lnes 上有一个 id。你可以从这里了解详细信息:aefxx.com/api/jqote2-reference/#$jqote
      • ...由于评论长度而继续...插件的作者非常有帮助,如果您以他的方式提出问题,它将为您提供一个完整的示例,说明您的后继问题。吉姆好运
      【解决方案3】:

      您可以使用 .clone() 方法在原始 jQuery 中执行此操作,但正如 Chris Pebble 指出的那样,它不会重命名您的元素名称和 Id。但是,有几个 jQuery 插件可以帮助您轻松完成此操作,请查看:

      http://plugins.jquery.com/project/dupeIt

      "dupe是一个jquery插件,允许 你复制和删除 DOM 元素和他们的孩子一起 点击。 dupe它巧妙地重命名 通过附加重复的元素 迭代次数,例如。 “txt_mytextfield”重复将是 “txt_mytextfield2”。

      http://plugins.jquery.com/project/clonefield

      "jQuery.cloneField 是一个插件 为您提供简单、动态的表格 字段(或任何其他 DOM 元素, 真的)复制和删除。”

      【讨论】:

      • 看起来 Dupeit 的主页已关闭。我同意克隆在我的情况下不起作用。您如何看待 Append() 或 AppendTo() 函数?谢谢!
      猜你喜欢
      • 2012-01-07
      • 1970-01-01
      • 2014-09-10
      • 2020-07-29
      • 2012-03-21
      • 2020-07-12
      • 2018-08-10
      • 2015-03-12
      • 2014-12-17
      相关资源
      最近更新 更多