【问题标题】:Dynamic add group of input field with dynamic sub input fields动态添加具有动态子输入字段的输入字段组
【发布时间】:2021-08-23 11:27:37
【问题描述】:

我想使用 jquery 添加一组带有动态子/子输入字段的输入字段。但我的问题是动态添加字段不适用于附加的新字段组。

示例:https://codepen.io/exclutips/pen/oNwNgoX

var max_group = 5;
    var add_group = $('.add_group');
    var group_wrapper = $('.group_wrapper');


    var max_field = 10;
    var add_button = $('.add_button');
    var wrapper = $('.field_wrapper');
    var html_group =''+
    '<a href="javascript:void(0);" class="remove_group btn btn-sm btn-danger pull-right"><i class="fa fa-minus"></i> remove group</a>'+
    '<table id="itemTable" class="table">'+
'<thead>'+
'<tr>'+

    '<th>Item Name</th>'+
    '<th>Item Description</th>'+
    '<th>Action</th>'+
'</tr>'+
'</thead>'+
'<tbody class="field_wrapper">'+

'<tr class="item-group">'+
    '<td><input type="text" class="form-control" placeholder="Group name"></td>'+
'</tr>'+

'<tr class="item">'+
    '<td><input type="text" class="form-control" placeholder="Item name"></td>'+
    '<td><input type="text"class="form-control" placeholder="Item Description"></td>'+
    '<td><a href="javascript:void(0);" class="add_button btn btn-sm btn-primary" title="Add field"><i class="fa fa-plus"></i></a></td>'+
'</tr>'+
'</tbody>'+
'</table>';
    

    
    var html_fields = '' +
        '<tr class="item">' +
        '<td> <div class="form-group mb-0"> <input type="text" class="form-control" placeholder="Item name"> </div> </td> ' +
        '<td> <div class="form-group mb-0"> <input type="text" class="form-control" placeholder="Item Description"> </div> </td> ' +
        '<td> <a href="javascript:void(0);" class="remove_button btn btn-sm btn-danger"><i class="fa fa-minus"></i></a> </td>' +
        '</tr>';

    var x = 1;
    var y = 1;
    
    $(add_group).click(function(){
        if( y < max_group){
            y++;
            $(group_wrapper).append(html_group);
        }
    
    });
    
    
    $(group_wrapper).on('click', '.remove_group', function(e){
        e.preventDefault();
        $(this).closest('group_wrapper').parent('table').remove();
        y--;
    });
    

    $(add_button).click(function(){
        if(x < max_field){
            x++;
            $(this).closest(wrapper).append(html_fields);
        }
    });
    
    

    $(wrapper).on('click', '.remove_button', function(e){
        e.preventDefault();
        $(this).closest('tr').remove();
        x--;
    });
body{
  padding:50px;
}

.pull-right{
  float:right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.0.2/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.0/js/bootstrap.min.js"></script>

<div class="group_wrapper">
    <a href="javascript:void(0);" class="add_group btn btn-sm btn-primary pull-right" title="Add Group"><i class="fa fa-plus"></i> add group</a>
    <table id="itemTable" class="table">
        <thead>
            <tr>
                <th>Item Name</th>
                <th>Item Description</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody class="field_wrapper">
            <tr class="item-group">
                <td><input type="text" class="form-control" placeholder="Group name"></td>
            </tr>   
            <tr class="item">
                <td><input type="text" class="form-control" placeholder="Item name" required></td>
                <td><input type="text"class="form-control" placeholder="Item Description" ></td>
        
                <td><a href="javascript:void(0);" class="add_button btn btn-sm btn-primary" title="Add field"><i class="fa fa-plus"></i></a></td>
            </tr>
        </tbody>
    </table>
</div>

【问题讨论】:

    标签: jquery css


    【解决方案1】:

    我已经更新了添加和删除字段的方法,如下所示,它对我有用。

        $('body').on('click','.add_button',function(){
            if(x < max_field){
                x++;
                $(this).closest('.field_wrapper').append(html_fields);
            }
        });
        
        
    
        $('body').on('click', '.remove_button', function(e){
            e.preventDefault();
            $(this).closest('tr').remove();
            x--;
        });
    

    您可以在此处找到您的代码无法运行的原因

    https://stackoverflow.com/a/11878976/9787228

    【讨论】:

    • 所以我还需要添加动态 ID 和名称字段数组,以便保存数据
    • 是的,您需要为控件添加不同的 id 或类来访问它的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2014-11-12
    • 2019-05-21
    相关资源
    最近更新 更多