首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当添加新表单输入失败时,增量name属性

当添加新表单输入失败时,增量name属性
EN

Stack Overflow用户
提问于 2017-02-22 09:04:13
回答 4查看 845关注 0票数 0

表单中有一个添加按钮,用于添加表单输入。在新表单输入时,我尝试增加属性name,例如name="description-1"name="description-2"等。然而,所有新输入都具有相同的name="description-1"。我错过了什么?

代码语言:javascript
复制
var dataList = $('.products');
var jsonOptions = [{
  "product": "11111",
  "description": "description 1"
}, {
  "product": "22222",
  "description": "description 2"
}, {
  "product": "33333",
  "description": "description 3"
}];

jsonOptions.forEach(function(item) {

  var option = '<option value="' + item.product + '">' + item.description + '</option>';

  dataList.append(option);
});

$(function() {
  $('body').on('input', '.product,.products', function() {

    var i = this.value;
    var description = "";
    var productsInBox = 0;

    jsonOptions.forEach(function(a) {
      if (a.product == i) {
        description = a.description;
      }
    });
    $(this).closest('.form-group').find('.description').val(description);


  });
});

counter = 0;

$('#form1').on('click', '.addButtonDED', function() {
    counter++;
    var $template = $('.form-group:last').clone(true, true).find('input').val('').end()
      .find('.addButtonDED').removeClass('addButtonDED').addClass('removeButtonDED').end()
      .find('[name="description-0"]').attr('name', 'description-' + counter).end()
      .find('i').removeClass('fa-plus').addClass('fa-minus').end();
    $template.insertAfter('.form-group:last');
  })

  // Remove button click handler
  .on('click', '.removeButtonDED', function() {
    counter--;
    var $row = $(this).closest('.form-group');
    $row.remove();
  });
代码语言:javascript
复制
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form1" method="post" class="form-horizontal" role="form">
  <fieldset>


    <div class="form-group">
      <div class="col-xs-2">
        <input type="text" list="products" class="form-control product" name="product" />
        <datalist id="products" class="products"></datalist>
      </div>

      <div class="col-xs-4">
        <input id="" type="text" class="form-control description" name="description-0" />
      </div>



      <div class="col-xs-1">
        <button type="button" class="btn btn-default addButtonDED"><i class="fa fa-plus"></i></button>
      </div>
    </div>

    <div class="col-xs-10 ">
      <button type="submit" name="formAction" value="next" class="btn btn-primary">sUBMIT</button>

    </div>



  </fieldset>
</form>

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-22 09:12:58

您总是要添加到'[name="description-0"]',因此当您将它们的名称更改为description-1时,选择器将不再选择它们。

您应该使用这个选择器'[name^="description-"]'来选择它们。

^=运算符意味着选择以指定值开头的每个元素,因此它将选择所有的description-0description-1description-whatever

您可以在这里阅读更多内容:value.asp

票数 1
EN

Stack Overflow用户

发布于 2017-02-22 09:14:17

您可以通过简单地将[name="description-0"]更改为[name="description-'+ (counter-1) +'"]来修复它。

问题是,您需要对前一个对象进行close,那么在第一个对象之后,decription-0将不再是0。

代码语言:javascript
复制
var dataList = $('.products');
var jsonOptions = [{
  "product": "11111",
  "description": "description 1"
}, {
  "product": "22222",
  "description": "description 2"
}, {
  "product": "33333",
  "description": "description 3"
}];

jsonOptions.forEach(function(item) {

  var option = '<option value="' + item.product + '">' + item.description + '</option>';

  dataList.append(option);
});

$(function() {
  $('body').on('input', '.product,.products', function() {

    var i = this.value;
    var description = "";
    var productsInBox = 0;

    jsonOptions.forEach(function(a) {
      if (a.product == i) {
        description = a.description;
      }
    });
    $(this).closest('.form-group').find('.description').val(description);


  });
});

counter = 0;

$('#form1').on('click', '.addButtonDED', function() {
    counter++;
    var $template = $('.form-group:last').clone(true, true).find('input').val('').end()
      .find('.addButtonDED').removeClass('addButtonDED').addClass('removeButtonDED').end()
      .find('[name="description-'+ (counter-1) +'"]').attr('name', 'description-' + counter).end()
      .find('i').removeClass('fa-plus').addClass('fa-minus').end();
    $template.insertAfter('.form-group:last');
  })

  // Remove button click handler
  .on('click', '.removeButtonDED', function() {
    counter--;
    var $row = $(this).closest('.form-group');
    $row.remove();
  });
代码语言:javascript
复制
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form1" method="post" class="form-horizontal" role="form">
  <fieldset>


    <div class="form-group">
      <div class="col-xs-2">
        <input type="text" list="products" class="form-control product" name="product" />
        <datalist id="products" class="products"></datalist>
      </div>

      <div class="col-xs-4">
        <input id="" type="text" class="form-control description" name="description-0" />
      </div>



      <div class="col-xs-1">
        <button type="button" class="btn btn-default addButtonDED"><i class="fa fa-plus"></i></button>
      </div>
    </div>

    <div class="col-xs-10 ">
      <button type="submit" name="formAction" value="next" class="btn btn-primary">sUBMIT</button>

    </div>



  </fieldset>
</form>

票数 1
EN

Stack Overflow用户

发布于 2017-02-22 09:23:36

您的实际问题是var $template = $('.form-group:last').clone(true, true),特别是:last位,这意味着它将抓取组底部的一个,因此.find('[name="description-0"]')只匹配第一次。在此之后,元素将有name="description-1",而该调用将找不到它。

相反,始终获取第一个元素:

var $template = $('.form-group').eq(0).clone(true, true)

工作jsFiddle

然而,

你为什么要增加你的名字属性呢?

您是否将这些数据发送到像php这样的服务器端处理?如果是这样,为什么不使用如下的数组语法:

代码语言:javascript
复制
    <input id="" type="text" class="form-control description" name="description[]" />

请参阅,name="something[]“还是name=”Array“?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42386963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档