【问题标题】:Appending and removing multiple elements with jquery included添加和删​​除包含 jquery 的多个元素
【发布时间】:2018-09-28 02:29:51
【问题描述】:

我有这个代码

var name1 = document.getElementById('1');
name1.addEventListener('input', function() {
  var result = document.querySelector('span.one');
  result.innerHTML = this.value;
});


$(document).ready(function() {
  var max_fields = 20; //maximum input boxes allowed
  var wrapper = $(".input_fields_wrap"); //Fields wrapper
  var add_button = $(".add_field_button"); //Add button ID

  var x = 1; //initlal text box count
  $(add_button).click(function(e) { //on add input button click
    e.preventDefault();
    if (x < max_fields) { //max input box allowed
      x++; //text box increment
      $(wrapper).append('<div class ="' + x + '" ><br><input type="text" class= "' + x + '" name="mytext[]"/><a href="#" class="remove_field">Remove</a><br></div>'); //add input box
      $('.hello:last').after('<div class="hello" id = "' + x + '"   >Hello, <span class="name"></span><br><br></div>');

      $('input').on('input', function(e) {

        divtoappend = $(this).attr('class');
        var val = "";
        var val = $(this).val();
        var sel = "#" + divtoappend + " span";
        $(sel).text('');
        $(sel).append(val);
      });

    }
  });

  $(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
    e.preventDefault();
    var rem = $(this).parents('div').attr('class');
    $('#' + rem).remove();
    $(this).parent('div').remove();
    x--;
  });


});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="input_fields_wrap">
  <button class="add_field_button">Add member</button>
  <br><br>
  <div><input type="text" id="1" name="mytext[]"></div>
</div>
<br>
<div class="hello" id="1">

  Hello, <span class="one"></span><br><br>

</div>

您可以输入您的姓名,它会自动出现在下方。您可以添加更多“成员”并输入他们的姓名,同样的情况也会发生。它工作正常。

现在,我尝试使用每组 3 个输入来制作它,并使用这 3 个输入制作一个短语。赞这个http://jsfiddle.net/JBxnQ/165/

var name1 = document.getElementById('name');
name1.addEventListener('input', function() {
  var result = document.querySelector('span.one');
  console.log(this.value);
  result.innerHTML = this.value;
});

var name1 = document.getElementById('city');
name1.addEventListener('input', function() {
  var result = document.querySelector('span.two');
  console.log(this.value);
  result.innerHTML = this.value;
});

var name1 = document.getElementById('age');
name1.addEventListener('input', function() {
  var result = document.querySelector('span.three');
  console.log(this.value);
  result.innerHTML = this.value;
});



$(document).ready(function() {
  var max_fields = 5; //maximum input boxes allowed
  var wrapper = $(".input_fields_wrap"); //Fields wrapper
  var add_button = $(".add_field_button"); //Add button ID

  var x = 1; //initlal text box count
  var y = 2;
  var z = 3;
  $(add_button).click(function(e) { //on add input button click
    e.preventDefault();
    if (x, y, z < max_fields) { //max input box allowed
      x++; //text box increment
      y++;
      z++;
      $(wrapper).append('<div class ="' + x + '" ><label>Name</label><input type="text" class= "' + x + '" name="mytext[]"/><a href="#" class="remove_field">Remove</a><br></div><div class ="' + y + '" ><label>City</label><input type="text" class= "' + y + '" name="mytext[]"/> <br> </div> <div class ="' + z + '" ><label>Age</label><input type="text" class= "' + z + '" name="mytext[]"/> <br> </div>'); //add input box
      $('.hello:last').append('<div class="hello" id = "' + x + '"   >Hello, <span class="one"></span></div><div class="hello" id = "' + y + '"   >, from <span class="two"></span></div><div class="hello" id = "' + z + '"   >. Your age is: <span class="three"></span><br><br></div>');

      $('input').on('input', function(e) {

        divtoappend = $(this).attr('class');
        var val = "";
        var val = $(this).val();
        var sel = "#" + divtoappend + " span";
        $(sel).text('');
        $(sel).append(val);
      });

    }
  });

  $(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
    e.preventDefault();
    var rem = $(this).parents('div').attr('class');
    $('#' + rem).remove();
    $(this).parent('div').remove();
    x--;
    y--;
    z--;
  });


});
.block {
  display: block;
}

input {
  width: 50%;
  display: inline-block;
  margin: 4px;
}

span.add,
span.remove {
  display: inline-block;
  cursor: pointer;
  text-decoration: underline;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<div class="input_fields_wrap">
  <button class="add_field_button">Add More Fields</button>
  <br><br>
  <label>Name</label><input type="text" id="name" name="mytext[]"> <br>
  <label>City</label><input type="text" id="city" name="mytext[]"> <br>
  <label>Age</label><input type="text" id="age" name="mytext[]">
</div>
<br>
<div class="hello" id="1">

  Hello, <span class="one"></span>, from <span class="two"></span>. Your age is: <span class="three"></span><br><br>

</div>

在最后一个代码中,第一个“输入组”运行良好。我的问题来自第二个(“第一个添加的成员”):它不会将短语放在一行中(我尝试在 div 中使用 display:inline 但没有用)。

如果您添加第三组输入(“添加第三个成员”),情况会变得更糟(您会看到)

我需要所有其他添加的“输入组”与第一个完全一样。

【问题讨论】:

  • 在同一个文档中有多个具有重复 ids 的元素是无效的 HTML - 这使得选择比需要的更难,你应该解决这个问题。
  • 另外,如果您存储新创建的元素,您可能根本不需要 id。

标签: javascript jquery append


【解决方案1】:

您的 JS 生成的 DOM 与 HTML 中的初始 DOM 不同。

HTML:

<div class="hello" id="1">
  Hello, <span class="one"></span>, from <span class="two"></span>. Your age is: 
  <span class="three"></span><br><br>
</div>

但是你的 JS 正在创建这个:

<div class="hello" id = "x"   >
  Hello, 
  <span class="one"></span>
</div>
<div class="hello" id = "y"   >
  , from <span class="two"></span>
</div>
<div class="hello" id = "z"   >
  . Your age is: 
  <span class="three"></span><br><br>
</div>

你需要删除所有的类,只保留相同的 DOM。

$('.hello:last').append('<div class="hello" id = "' + i + '"   >Hello, <span class="one"></span>, from <span class="two"></span>. Your age is: <span class="three"></span><br><br></div>');

我也有点困惑为什么你有 x y z 变量。您应该能够使用一个变量来实现这一点,每次添加一个新组时您只需递增该变量。它还可以创建无限组,您也可以通过在创建组时检查递增 var 来限制它。

【讨论】:

  • 对不起,我真的不喜欢这个。请你能更好地解释一下吗?我会非常感谢你。如果您添加一些代码供参考会很棒
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多