【问题标题】:creating dynamic form elements (with incremented name attributes)创建动态表单元素(具有递增的名称属性)
【发布时间】:2010-10-13 07:31:26
【问题描述】:

如何动态创建表单元素并为其提供动态递增的输入名称属性?我正在使用 jquery,但我愿意接受任何解决方案。

我有一个如下所示的 div:

<div>

<input type="text" name="title1" />

<input type="text" name="body1" />

<select name="photo1" size="1">

<option value="0">foo</option>

</select>

</div>

我想克隆它 n 次并将名称值增加 1 因此,例如,第二个 div 看起来像这样(只有名称值发生变化):

<div>

<input type="text" name="title2" />

<input type="text" name="body2" />

<select name="photo2" size="1">

<option value="0">foo</option>

</select>

</div>

使用 jquery 克隆 div 很简单:

$(文档).ready(函数(){ $('.toClone').click(function(){ $(this).clone(true).insertAfter(this); }); });

但我无法自动增加动态创建的 div 字段的名称值。
任何人都知道如何做到这一点?

【问题讨论】:

    标签: javascript jquery forms


    【解决方案1】:

    你用什么处理这个?使用 PHP,您可以将字段命名为 title[]body[] 等,以便将它们作为数组发送。这将是最好的方法,因为克隆将是微不足道的。据我所知,它同样适用于其他技术。无论如何,如果你真的想按照自己的方式去做:

    $(document).ready(function(){
        $('.toClone').click(function(){
            var el = $(this).clone(true).insertAfter(this);
            var regex = new RegExp(/^(.+)(\d+)$/);
            $(el).find(':input').each(function() {
                var match = $(this).attr('name').match(regex);
                $(this).attr('name', match[1] + (++match[2]));
            });
        });
    });
    

    这应该可以解决问题。

    【讨论】:

    • 我想你到 10 岁时想要 (\d+)
    • 实际上我认为您将字段放入数组的方式比我尝试做的更好(我正在使用 PHP)。我想我是从错误的角度考虑它。 (再次)感谢保罗。
    【解决方案2】:

    可以通过以下方式更改名称属性字段:

    var i = 1;
    $(this).clone(true).attr('name', 'title' + i).insertAfter(this);
    

    那么你只需要管理递增变量。

    【讨论】:

    • 其实只会改变this所指的div的name属性。在我的示例
      中,您的解决方案将创建
      但不会更改字段名称属性。我正在尝试更改 div 中各个字段的名称属性,而不是 div 本身。
    猜你喜欢
    • 2023-04-07
    • 2013-07-23
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多