【问题标题】:How to find number of elements when adding and deleting elemnts dynamically using jQuery?使用jQuery动态添加和删除元素时如何查找元素数量?
【发布时间】:2010-10-03 10:10:37
【问题描述】:

我正在开发一个 Web 应用程序(使用 ASP.NET 2.0 (C#) 和 jQuery)

在我的应用程序中,我们有一个界面,我们的员工可以使用该界面输入公司的记录。我们提供了包含基本字段、公司名称、联系人、电话等的界面。现在您知道有些公司有自己的分支机构,有些公司很少(1 到 10 个),有些则有很多(100-200)个分支机构。我们还提供了一个使用 jQuery 的动态界面,允许我们的员工根据特定公司拥有的分支机构数量添加分支机构。

另外,我们使用 jQuery 的 append 函数作为 ..

$("#branches").append("branch html fields text liek a html input field with id 'Namebranch1' ");

现在,通过添加,我们还提供了一个带有每个分支字段的按钮,分别用于删除该特定分支。删除我用过

$("#branch1").remove()

假设我已经添加了5个分支,那么在提交之前,我觉得3号分支没有必要进入,所以我删除了那个分支数据。 所以添加和删除的过程如下,我们添加了

1,2,3,4,5

然后,我们删除了第三个分支,现在我们有了

1,2,4,5

现在我们有 4 个元素,所以每当我的用户添加或删除分支时,我分别从 javascript 变量中添加 1 和减去 1。然后在隐藏字段中输入该变量,以便当用户提交数据时,我将获得正确的计数,即用户如何添加任何分支,并根据此计数,我知道我有多少次必须运行循环以分别捕获所有分支数据。

但问题是当用户提交表单时,我正在运行循环 4 次,这意味着,我将获得 1,2 和 4 个分支的数据,但是当循环完成 4 个循环时,循环将停止,数据第 5 个分支实际上是 4 个将丢失。因为当用户提交表单时将发布的元素为(branchName5、branchTitle5 等)

我希望你们明白我需要什么?请告诉我这个问题的一些合乎逻辑的解决方案。

谢谢

【问题讨论】:

    标签: asp.net jquery dynamic


    【解决方案1】:

    摆脱隐藏的计数器变量,只需遍历 Request.Form.Keys 寻找分支*。然后,您将只处理以分支开头的任何表单变量。

    class Branch { public string Name; public string Title; }
    
    void OnLoad(EventArgs e) {
       base.OnLoad(e);
    
       var branches = new Dictionary<int, Branch>();
       foreach (string key in Request.Form.Keys) {
         if (!key.StartsWith("branch")) continue;
    
         int id;
         if (key.StartsWith("branchTitle")) {
           id = int.Parse(key.Substring("branchTitle".Length));
           branches.Ensure(i).Title = Request.Form[key];
         } else if (key.StartsWith("branchName")) {
           id = int.Parse(key.Substring("branchName".Length));
           branches.Ensure(i).Name = Request.Form[key];
         }            
       }
    }
    
    // Ensure extension method
    T Ensure<K, T>(this Dictionary<K, T> d, K key) where T:new {
       if (!d.ContainsKey(key)) {
          d.Add(key, new T());
       }
       return d[key];
    }
    

    【讨论】:

    • 嗨,马克,谢谢你的回复,但我不明白,你想解释一下。实际上,我没有得到“branches.Ensure(i).Title = Request.Form[key];”行以及“T Ensure...”方法。请如果你能解释我。
    • 如果用户添加了 3 个分支,那么我们需要一个分支的所有变量同时进行,这样我们就可以使用 branchName1、BranchTitle1、BranchAddress1 和与 branchName2 等相同...
    • 但我认为在“Request.Form.Keys”方法中变量会分散,那么我们将如何同时获取所有变量。而如果我们使用计数器知道元素的确切数量,那么我们可以轻松地运行一个循环并获取请求名称,例如 ("BranchTitle" + i)。
    • @Prashant - 我正在使用字典将 id 保存在一起。如果需要,确保只在字典中创建一个新条目。
    【解决方案2】:

    也许这是一个线索?在提交中......

    $('#branches').each( function (i) { this.id = 'branch' + i } );
    

    【讨论】:

    • "i" 将是#branches 中存在的元素 ID ??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2019-12-29
    • 2016-01-28
    • 2021-09-26
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多