JavaScript 删除功能无效

JavaScript delete function not working

我正在做一个小项目,我有一个功能似乎不起作用!这是我的删除功能:

$(document).ready(function(){
   var id = 0;
var addOpdracht = $('<a/>', {
   'class': 'btn btn-success',
   'id': 'addOpdracht'
}).on('click', function(){
    $('.panel-body').append(getExerciseBlock(id));
    id++;
}).html('<i class="fa fa-plus"></i>');

$('.jumbotron').append(addOpdracht);
 })


function getAddBtn(target, i){
 var addBtn = $('<a/>', {
                'class': 'btn btn-primary'
            }).on('click', function(){
              $(target).append(getWordPartInput(i));
            }).html('<i class="fa fa-plus"></i>');
            console.log(target);
     return addBtn;
}


 function getRemoveBtn(target, i){
   var removeBtn = $('<a/>', {
                'class': 'btn btn-danger'
            }).on('click', function(){
              $(target).remove(getWordPartInput(i));
            }).html('<i class="fa fa-minus"></i>');
            console.log(target);
  return removeBtn;
 }



 function getExerciseBlock(i){
   var eBlock = $('<div/>',{
'id': i,
'class': 'col-md-12'
  });

  $(eBlock).append(getAudioBtn(i), getWordInput(i), getWordPartInput(i), 
getRemoveBtn(i), getAddBtn(eBlock, i));

  return eBlock;
}


 function getAudioBtn(id, cValue){
  cValue = cValue || '';
  var audioBtn = $('<a/>', {
                'class': 'btn btn-primary'
            }).html('<i class="fa fa-volume-up"></i>');
  return audioBtn;
}


  function getWordInput(id, cValue){
    cValue = cValue || '';
    var wInput = $('<input/>', {
                'class': 'form-group form-control',
                'type': 'text',
                'name': 'question_takeAudio_exerciseWord[]',
                'placeholder': 'Exercise',
                'id': 'exerciseGetWordInput'
            })
 return wInput;
 }


function getWordPartInput(id, cValue){
  cValue = cValue || '';
  var wpInput = $('<input/>', {
                  'class': 'form-group form-control',
                  'type': 'text',
                  'value': cValue,
                  'placeholder': 'Syllables',
                  'id': 'SyllablesGetWordPartInput'
              });
  return wpInput;
}

不起作用的部分是:

   function getRemoveBtn(target, i){
   var removeBtn = $('<a/>', {
                'class': 'btn btn-danger'
            }).on('click', function(){
              $(target).remove(getWordPartInput(i));
            }).html('<i class="fa fa-minus"></i>');
            console.log(target);
  return removeBtn;
 }

getBtn 有效,但我的删除功能不起作用。 是什么阻止了我的代码正常工作? 'getAddBtn' 每次单击它时都会给我一个额外的输入字段,现在我试图让我的 removeBtn 做同样的事情,但这次它应该每次都删除一个输入字段。 一张图片澄清一下:请注意蓝色的小 "add" 标志!这将提供额外的输入字段!绿色大按钮与问题无关!当单击蓝色按钮时,它会不断添加和添加输入字段,但是如果您单击它太多次并且想删除一个怎么办?我希望这个小小的 EDIT 有助于更多地理解我的意思。

根据 jquery docs删除 可以通过以下几种方式完成:

来自文档的示例:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

选项 1:

$( ".hello" ).remove();

选项 2:

$( "div" ).remove( ".hello" );

So, add a class attribute to the html element you wish to delete and use one of the above syntax to delete it.

您需要在这里做一些事情。您必须将 getRemoveBtn 函数更改为如下内容:

function getRemoveBtn(target, i){
  var removeBtn = $('<a/>', {
      'class': 'btn btn-danger'
   }).on('click', function(){ 

       /* Select all inputs by going to parent first 
          and then selecting all child inputs with class 'syllable'
          I have added this class in your getWordInput() function
          as noted bellow  
       */             
       let syllableInputs = $(this).parent().children("input.syllable");

       /*
          Now when you have ALL inputs of specific div
          remove the last one.
       */
       syllableInputs[syllableInputs.length-1].remove(target);

   }).html('<i class="fa fa-minus"></i>');
}

这基本上只删除来自 div 的输入,其中删除按钮是:$(this).parent().children("input.syllable")

不应该做的第二件事是在你的getWordPartInputgetWordInput函数中分配相同的ID。 id 的目的是在您的 html 文档中是唯一的:

  var wInput = $('<input/>', {
            'class': 'form-group form-control', // Add class here instead of id
            'type': 'text',
            'name': 'question_takeAudio_exerciseWord[]',
            'placeholder': 'Exercise',
            'id': 'exerciseGetWordInput' // Don't do this. Use class
  })

但是为了能够 select 那些 input,我在您的输入中创建了一个额外的 syllable class:'class': 'form-group form-control syllable' 并使用了它作为选择每个 syllable 输入的参考,您可以在我的代码中看到:$(this).parent().children("input.syllable");