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")
。
你不应该做的第二件事是在你的getWordPartInput
和getWordInput
函数中分配相同的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");
我正在做一个小项目,我有一个功能似乎不起作用!这是我的删除功能:
$(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")
。
你不应该做的第二件事是在你的getWordPartInput
和getWordInput
函数中分配相同的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");