【问题标题】:JavaScript delete function not workingJavaScript删除功能不起作用
【发布时间】:2018-10-16 22:55:37
【问题描述】:

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

$(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 做同样的事情,但这次它应该每次都删除一个输入字段。 图片澄清:请注意蓝色的小“添加”标志!这将提供额外的输入字段!绿色大按钮与问题无关!当单击蓝色按钮时,它会不断添加和添加输入字段,但是如果单击太多次并且想要删除一个怎么办?我希望这个小编辑有助于更多地理解我的意思。

【问题讨论】:

  • working code example 对我们的帮助最大。请更改问题的名称。有实际的 delete javascript 关键字,所以很混乱
  • 你的函数getWordPartInput(i)的代码也会有所帮助。
  • 还有,请尝试以更易读的方式格式化您的代码
  • @LudovitMydla jsfiddle.net/DanDy/hqy73b0h 一个工作示例,第一个红色按钮有效(一半),而其他所有按钮根本无效。

标签: javascript button removeall


【解决方案1】:

您需要在这里做一些事情。您必须将您的 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
  })

但是为了能够选择那些 inputs,我在您的输入中创建了一个额外的 syllable 类:'class': 'form-group form-control syllable' 并将其用作选择每个 syllable 输入的参考,正如您在我的代码:$(this).parent().children("input.syllable");

【讨论】:

  • oke,'class': 'form-group form-control syllable' 应该去哪里?在我制作的全新输入中还是应该更改 var wInput 的类?您已经评论了“在此处添加类而不是 ID”,但是有一个类而不是一个 ID,所以请您澄清一下吗?使用了 ID,因此我可以顺便为我的 CSS 指定它。所以除非你说这仍然是一种不好的做法,否则我会删除它,但功能并不多(就将其发送到 JSON 文件而言)
  • 通过评论我的意思是在getWordInput函数中创建输入时,将'class': 'form-group form-control',行更改为:'class': 'form-group form-control syllable',并使用新类syllable进行格式化。不要使用'id': 'exerciseGetWordInput'(只需从代码中删除该行)。在多个元素上使用相同的 id 确实是不好的做法。您可以使用新类 syllable 指定您的 CSS 输入
  • 最后一个问题,如果你不介意我,我如何在多个元素上使用 id?元素不只是克隆吗?并且对于音节 form-group form-control 音节,我假设您的意思是创建音节的输入?如果是这样,那么应该是 getWordPartInput(只是为了确定)
  • 您可以将其称为克隆或复制,但最终您的页面上可能会有多个元素具有相同的id。这不好。如果这回答了您的问题,请将其标记为这样。
  • 是的,非常感谢您投入的时间和精力!你的代码完成了这项工作!
【解决方案2】:

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

来自文档的示例:

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

选项 1:

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

选项 2:

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

所以,给你想删除的 html 元素添加一个类属性,然后 使用上述语法之一将其删除。

【讨论】:

  • ok,但是制作的输入字段(当点击 addBtn 时)不能有类或 ID(据我所知,如果可以,怎么做?),因为它们是制作的使用“getWordPartInput”。所以它们不存在,直到我点击蓝色的小图标“添加”。红色的应该带走我“添加”的每个输入字段。但这应该根据 ID 来完成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多