javascript - 具有 jQuery 动态表单的单个 div 中的多个文本字段

标签 javascript jquery forms

使用 here 中的 jQuery 代码,但我试图在每个 div 中有多个文本输入。它正确显示并递增并保存第一个元素的名称和 id,但对于第二个年龄输入,它仅存储第一个输入。

 <html>
    <head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
<script type="text/javascript">
        $(document).ready(function() {
            $('#btnAdd').click(function() {
                var num     = $('.clonedInput').length;
                var newNum  = new Number(num + 1);

                var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);

                newElem.children(':first').attr('id', 'name' + newNum).attr('name', 'name' + newNum);
                $('#input' + num).after(newElem);
                $('#btnDel').attr('disabled','');

                if (newNum == 5)
                    $('#btnAdd').attr('disabled','disabled');
            });

            $('#btnDel').click(function() {
                var num = $('.clonedInput').length;

                $('#input' + num).remove();
                $('#btnAdd').attr('disabled','');

                if (num-1 == 1)
                    $('#btnDel').attr('disabled','disabled');
            });

            $('#btnDel').attr('disabled','disabled');
        });
    </script>
</head>

<body>

<form id="myForm">
    <div id="input1" style="margin-bottom:4px;" class="clonedInput">
        Name: <input type="text" name="name1" id="name1" />
    </div>

    <div>
        <input type="button" id="btnAdd" value="add another name" />
        <input type="button" id="btnDel" value="remove name" />
    </div>
</form>

</body>
</html>

这是我的新表单和 jQuery 代码的样子。

<form id="myForm">
<div id="input1" style="margin-bottom:4px;" class="clonedInput">
    Name: <input type="text" name="name1" id="name1" />
    Age: <input type="text" name="age1" id="age1" />
</div>

<div>
    <input type="button" id="btnAdd" value="add another name" />
    <input type="button" id="btnDel" value="remove name" />
</div>

newElem.children(':first')
             .attr('id', 'age' + newNum)
            .attr('name', 'age' + newNum);

最佳答案

您的脚本仅更新第一个输入,您需要循环并更新克隆 div 中的所有输入

$('#btnAdd').click(function () {
    var num = $('.clonedInput').length;
    var newNum = num + 1;

    var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);

    newElem.find(':input').each(function () {
        $(this).attr('id', $(this).attr('id').replace(/\d+/, newNum));
        $(this).attr('name', $(this).attr('name').replace(/\d+/, newNum));
    });

    $('#input' + num).after(newElem);
    $('#btnDel').attr('disabled', '');

    if (newNum == 5) $('#btnAdd').attr('disabled', 'disabled');
});

关于javascript - 具有 jQuery 动态表单的单个 div 中的多个文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17954384/

相关文章:

JavaScript 通过 $_POST 添加文件到表单数据

javascript - 在 native react 中使用 "for await...of"

javascript - Selenium 表格提交

javascript - 将值从 javascript 插入数据库

jquery - 单击图像(启动画面)播放嵌入的 Youtube 电影

jQuery 与 jQuery Mobile - 脚本顺序重要吗?

PHP Send-Mail 表单到多个电子邮件地址

javascript - 正常形式的 Dropzone

javascript - 有什么方法可以检查 jQuery 中服务器的可达性测试

javascript - 如何在Angular 2中从父级调用@Input EventEmitter