【问题标题】:name attribute is not working in add/remove input field dynamically function名称属性在动态添加/删除输入字段功能中不起作用
【发布时间】:2021-03-06 15:17:26
【问题描述】:

html

<div class="field_wrapper">   
    <div>
        <input id="size" type="text" name="size[]" value="" placeholder="Size" style="width:120px;" required="" />
        <input id="sku" name="sku[]" type="text" value="" placeholder="SKU" style="width:120px;" required="" />
        <input id="price" type="numver" name="price[]" value="" placeholder="Price" style="width:120px;" required="" />
        <input id="stock" type="number" name="stock[]" value="" placeholder="Stock" style="width:120px;" required="" />
        <a href="javascript:void(0);" class="add_button" title="Add field">add</a>
</div>
</div>

jQuery 代码

$(document).ready(function(){
   var maxField = 10;
    var addButton = $('.add_button');
    var wrapper = $('.field_wrapper');
    var fieldHTML = '<div><br><input type="text" name="size[]" style="width:120px" placeholder="Size"/>   <input type="text" name="sku[]" style="width:120px" placeholder="SKU"/>   <input type="text" name="price[]" style="width:120px" placeholder="Price"/>   <input type="text" name="stock[]" style="width:120px"  placeholder="Stock"/><a href="javascript:void(0);" class="remove_button">remove</a></div>';
    var x = 1;
    $(addButton).click(function(){
        if(x < maxField){ 
            x++;
            $(wrapper).append(fieldHTML);
        }
    }); 
    $(wrapper).on('click', '.remove_button', function(e){
        e.preventDefault();
        $(this).parent('div').remove();
        x--;
    });
});

问题是添加多字段后名称属性仅适用于第一个字段然后名称属性数组不适用于多字段请帮助我解决此错误

【问题讨论】:

    标签: javascript php html jquery laravel


    【解决方案1】:

    您在页面上覆盖了相同的元素。因此,任何以前的 size[] 或 sku[] 或其他任何内容都将被删除,以支持被覆盖的元素。

    您可以通过在数组中指定确切的名称来解决此问题。在最初加载的页面上是这样的:

    <input id="size" type="text" name="size[1]" value="" placeholder="Size" style="width:120px;" required="" />
    

    然后在您的 JS 中,在数组中使用您的 var x 值(尽管从 2 开始):

    var fieldHTML ='';
    var x = 2;
    $(addButton).click(function(){
        if(x < maxField){ 
            x++;
            fieldHTML = '<div><br><input type="text" name="size['+x+']" style="width:120px" placeholder="Size"/>   <input type="text" name="sku['+x+']" style="width:120px" placeholder="SKU"/>   <input type="text" name="price['+x+']" style="width:120px" placeholder="Price"/>   <input type="text" name="stock['+x+']" style="width:120px"  placeholder="Stock"/><a href="javascript:void(0);" class="remove_button">remove</a></div>';
            $(wrapper).append(fieldHTML);
        }
    }); 
    

    您必须更新您的 click 函数 inside 的 fieldHTML var 以接受数组中的变量,因为 x 每次都会递增。

    【讨论】:

    • 先生,我用您编辑的相同条目编写了完全相同的代码,但仍然无法正常工作。它只选择了第一个条目 [size] => Array ( [1] => h) [sku] => Array ( [1] => w ) [price] => Array ( [1] => 2 ) [stock ] => Array ( [1] => 1 ) 这是输出
    • @Watercayman``` var maxField = 10; var addButton = $('.add_button'); var wrapper = $('.field_wrapper'); var fieldHTML ='';变量 x = 2; $(addButton).click(function(){ if(x
      删除
      '; $(wrapper).append(fieldHTML) ; } }); $(wrapper).on('click', '.remove_button', function(e){ e.preventDefault(); $(this).parent('div').remove(); x--; }); ```
  • 好的,所以我们从输出中知道代码正确地将数组添加到具有索引的页面上,因为它从 1 而不是 0 开始。这意味着答案中的代码是正确的。但是,看起来页面在发送时没有看到整个数组。您如何将表单数据发送回控制器?如果通过 JS,您需要确保它看到的是动态加载的内容 ($(document)....),而不是查看只有一组输入的静态页面内容。
  • 当您使用按钮添加一组时,如果它正确添加了一组新的输入,则 JS 代码工作正常。问题必须出在发送内容没有看到动态添加的代码的任何内容上。这是次要失败,但现在您有了不再覆盖的附加文本,您可以通过为发送表单数据的代码添加 $(document) 范围来解决此问题,以获取新添加的表单元素。跨度>
  • 我通过 php &lt;form role="form" method="post" @if(empty($project_data['id']))action="{{url('admin/add_edit_project_data')}}" @else action="{{url('admin/add_edit_project_data/'.$project_data['id'])}}" @endif name="project_data" id="project_data" enctype="multipart/form-data"&gt;@csrf 将表单数据发送回控制器@此表单包含 7 个输入字段、2 个选择列表和 3 个复选框都可以正常工作,但此字段不是 Route::match(['get','post'],'add_edit_project_data/{id?}','ProjectDataController@add_edit_pro_data');
  • 猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多