【问题标题】:Generating new html Row and Appending to table in JQuery在 JQuery 中生成新的 html 行并附加到表中
【发布时间】:2011-06-28 20:46:55
【问题描述】:

我已经为此处显示的此网页创建了一个从我当前“包”中的“补丁”SQL DB 生成的表:

<table id="PatchTable">
                <tr>
                    <th>
                        Name
                    </th>
                    <th>
                        Date
                    </th>
                    <th>
                        Detach
                    </th>
                    <th>
                        Evironment
                    </th>
                    <th>
                        Platform
                    </th>
                    <th>
                    </th>
                </tr>
                @{DeploymentMVC.Models.DeploymentDb db = new DeploymentMVC.Models.DeploymentDb();
                  DeploymentMVC.Models.Patch[] patches = db.GetPatches(Model);
                }
                @foreach (var patch in patches)
                {
                    <tr id=@string.Format("patch_{0}", patch.PatchID)>
                        <td class="NameDisplay">
                            @Html.DisplayFor(ptch => patch.PatchName)
                        </td>
                        <td class="DateDisplay">
                            @Html.DisplayFor(ptch => patch.PatchDate)
                        </td>
                        <td>
                            <input type="hidden" name="pkgID" class="pkgID" value="@Model.PackageID" />
                            <input type="checkbox" class="patchIds" name="patchIdString" value="@patch.PatchID" />
                        </td>
                        <td>
                            <div id=@string.Format("environment_{0}", patch.PatchID)>
                                @patch.Environment
                            </div>
                            <div class="hidden" id=@string.Format("SelectEnvironment_{0}", patch.PatchID) >
                                <select name="DeploymentOption" id=@string.Format("EnvironmentValue_{0}", patch.PatchID)>
                                    <option value="Staging">Staging</option>
                                    <option value="Live">Live</option>
                                </select>
                            </div>
                        </td>
                        <td>
                            @*TODO: Figure out deploy options*@
                            <div id=@string.Format("platform_{0}", patch.PatchID)>
                                @patch.Platform
                            </div>
                            <div class="hidden" id=@string.Format("SelectPlatform_{0}", patch.PatchID)>
                                <select name="Staging Servers" id=@string.Format("PlatformValue_{0}", patch.PatchID)>
                                    <option value="air-cast">air-cast</option>
                                    <option value="redshop">Redshop</option>
                                </select>
                            </div>
                        </td>
                        <td>
                            <div class="EditButton">
                                <input type="button" class="button EditButtonInput" value="" id=@string.Format("edit_{0}", patch.PatchID) />
                            </div>
                            <div class="SaveButton">
                                <input type="button" class="button SaveButtonInput hidden" value="" id=@string.Format("save_{0}", patch.PatchID) />
                            </div>
                        </td>
                    </tr>
                }
            </table>

然后我有另一个未分配的“补丁”表,可以通过复选框和提交按钮将其添加到我上面的表中 ^。此处显示:

<table id="newPatchTable" class="sortable">
                        <tr>
                            <th>
                                <div class="pointer">
                                    Name
                                </div>
                            </th>
                            <th>
                                <div class="pointer">
                                    Date
                                </div>
                            </th>
                            <th>
                                Location
                            </th>
                            <th>
                            </th>
                        </tr>
                        @{
                            DeploymentMVC.Models.Patch[] patchArray = DeploymentMVC.Models.DirectoryHelper.GetAllPatches();
                        }
                        @if (patchArray.Length != 0)
                        {
                            foreach (var patch in patchArray)
                            {
                            <tr id=@string.Format("addPatch_{0}", patch.PatchName.Replace(@" ", string.Empty))>
                                <td class="NameDisplay">
                                    @Html.DisplayFor(modelItem => patch.PatchName)
                                </td>
                                <td class="DateDisplay">
                                    @Html.DisplayFor(modelItem => patch.PatchDate)
                                </td>
                                <td class="LocationDisplay">
                                    @Html.DisplayFor(modelItem => patch.PatchLocation)
                                </td>
                                <td>
                                    <input type="checkbox" name="patchNames" class="PatchNames" value="@patch.PatchName" />
                                </td>
                            </tr>
                            }
                        }
                        else
                        {
                            <tr>
                                <td>
                                    <div>
                                        <a>There are no current patches to add to your package. Please go to the @Html.ActionLink("Deploy Packages", "DeployPackages", "Package")
                                            page to see packages or refresh the page if you recently committed a change are
                                            expecting a patch to show up here. </a><a href="sf-build:8080">Click here to go to TeamCity
                                                to manually build your patch.</a>
                                    </div>
                                </td>
                            </tr>
                        }
                    </table>

我目前编写了一些 javascript 来从我的未分配补丁表(表 2)中删除选定的“补丁”(行),并将它们添加到包的补丁表(表 1)中。我知道这不是正确的做法,但我不知道如何使用clone() 并能够编辑idclass 和每个&lt;tr&gt;&lt;td&gt; 的文本,和&lt;div&gt;

这是我的 JS(我删除了一些东西,因为我认为它们对我的问题没有必要):

$('#AddSelectedPatches').click(function () {
        ...
            $.each($('.PatchNames:checked'), function (i, element) {
             ...
                                                //Creates row in the package's "Patches" table
                                                var newRow = '<tr id=patch_' + patchID + '>'
                                                                 + '<td class="NameDisplay">' + patchName + '</td>'
                                                                 + '<td class="DateDisplay">' + patchDate + '</td>'
                                                                 + '<td><input type="hidden" name="pkgID" class="pkgID" value=' + $('#pkgID').val() + '/>'
                                                                 + '<input type="checkbox" class="patchIds" name="patchIdString" value=' + patchID + ' /></td>'
                                                                 + '<td><div id=environment_' + patchID + '>' + patchEnvironment + '</div>'
                                                                 + '<div class="hidden" id=SelectEnvironment_' + patchID + '><select name="DeploymentOption" id="EnvironmentValue_" + patch.PatchID>'
                                                                 + '<option value="Staging">Staging</option><option value="Live">Live</option></select></div></td>'
                                                                 + '<td><div id=platform_' + patch.PatchID + '>' + patchPlatform + '</div>'
                                                                 + '<div class="hidden" id=SelectPlatform_' + patchID + '>'
                                                                 + '<select name="Staging Servers" id="PlatformValue_" + patch.PatchID><option value="1">air-cast</option>'
                                                                 + '<option value="2">Redshop</option></select></div></td><td><div class="EditButton"><input type="button" class="button EditButtonInput" value="" id=edit_' + patchID + ' />'
                                                                 + '</div><div class="SaveButton"><input type="button" class="button SaveButtonInput hidden" value="" id=save_' + patchID + ' />'
                                                                 + '</div></td></tr>';
                                                $('#PatchTable').append(newRow);
                                                //Removes row in "New Patches to Add" table
                                                var patchName_noSpaces = patchName.replace(/\s/g, '')

                                                $('#addPatch_' + patchName_noSpaces).remove();
                                            });
        return false;
    });

这适用于直观地添加补丁(并且我的复选框有效),但我的 EditButtonInput 和隐藏的 SaveButtonInput 类无法识别 javascript 创建的行(即我的 click 这两个类的事件在JS 创建的被点击)。我检查了拼写错误,但没有发现任何会导致此问题的内容。

如果我的问题不清楚,请告诉我。谢谢!

【问题讨论】:

  • 你能把你的javascript粘贴到你要附加事件的地方吗?因为如果您使用 jquery 附加事件,那么您应该使用方法 live() 附加事件,因此 jQuery 将在向其添加新元素附加事件时,例如 $('#your_table tr').live('click', function( ) {});
  • @Senad Meškin 我已经为上面的附件发布了我的 javascript。 “ $('#PatchTable').append(newRow); ”这一行是我添加新行的地方。我不是试图在行单击事件上修改行,而是在按钮单击事件上。抱歉,如果我没有清楚地理解您的问题。

标签: jquery html asp.net-mvc row add


【解决方案1】:

男人,这不是做这些事情的更好方法。

我建议你使用 2 连接列表使用 jquery,就是这么简单!!!(http://jqueryui.com/demos/sortable/#connect-lists)

然后正如 Senad 所指出的,您必须将 .live 用于加载时未创建的 dom 中的元素。

希望对您有所帮助。

【讨论】:

  • 谢谢,我会调查的。我知道这是一个不好的方法。我是新手 :)
猜你喜欢
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2018-10-06
  • 1970-01-01
相关资源
最近更新 更多