admin管理员组文章数量:1287593
I'm struggling for something that seems pretty basic, though I'm not seeing what I am doing wrong.
I want that onClick a certain div is cloned till the maximum of 4 times. (So far so good), and I want to have a remove button that deletes one of the divs inserted.
And my problem is right there. I can't get the remove button to work.
JS
$(document).ready(function() {
var max_fields = 4; // maximum input boxes allowed
var wrapper = $("#addDriverContent div:first");
var add_button = $(".add_field_button"); // Add button ID
var x = 0
$(add_button).click(function(e) {
e.preventDefault();
// max input box allowed
if(x < max_fields) {
x++;
$(wrapper).clone().append('<a href="#" class="remove_field">Remove</a>').appendTo($('#clone_wrapper'));}
});
// user click on remove text
$(wrapper).on("click",".remove_field", function(e) {
e.preventDefault();
$(this).parent().sibling('#content').remove();
x--;
})
});
HTML
<div id="addDriverContent" style="display:none;">
<div id="content">
Contents
</div>
</div>
<button type="button" class="add_field_button" id="clone_button">ADD DRIVER</button>
<div id="clone_wrapper"></div>
Take a look at my fiddle.
(I've started with this example)
I'm struggling for something that seems pretty basic, though I'm not seeing what I am doing wrong.
I want that onClick a certain div is cloned till the maximum of 4 times. (So far so good), and I want to have a remove button that deletes one of the divs inserted.
And my problem is right there. I can't get the remove button to work.
JS
$(document).ready(function() {
var max_fields = 4; // maximum input boxes allowed
var wrapper = $("#addDriverContent div:first");
var add_button = $(".add_field_button"); // Add button ID
var x = 0
$(add_button).click(function(e) {
e.preventDefault();
// max input box allowed
if(x < max_fields) {
x++;
$(wrapper).clone().append('<a href="#" class="remove_field">Remove</a>').appendTo($('#clone_wrapper'));}
});
// user click on remove text
$(wrapper).on("click",".remove_field", function(e) {
e.preventDefault();
$(this).parent().sibling('#content').remove();
x--;
})
});
HTML
<div id="addDriverContent" style="display:none;">
<div id="content">
Contents
</div>
</div>
<button type="button" class="add_field_button" id="clone_button">ADD DRIVER</button>
<div id="clone_wrapper"></div>
Take a look at my fiddle.
(I've started with this example)
Share Improve this question edited Aug 8, 2016 at 17:02 Jonathan Lam 17.4k17 gold badges71 silver badges99 bronze badges asked Aug 8, 2016 at 16:45 grcodergrcoder 3335 silver badges17 bronze badges 04 Answers
Reset to default 4There are two problems with your javascript
- You are attaching the
click event handler
to wrong element. The element you are attaching to is not even visible on page and is never clicked. - Your line where you try to remove the clicked content is wrong.
$(this).parent().remove()
is enough.
See Updated Fiddle
$(document).ready(function() {
var max_fields = 4; //maximum input boxes allowed
var wrapper = $("#addDriverContent div:first");
var add_button = $(".add_field_button"); //Add button ID
var x = 0
$(add_button).click(function(e) {
e.preventDefault();
if (x < max_fields) { //max input box allowed
x++;
$(wrapper).clone().append('<a href="#" class="remove_field">Remove</a>').appendTo($('#clone_wrapper'));
}
});
$(document).on("click", ".remove_field", function(e) { //user click on remove text
e.preventDefault();
$(this).parent().remove();
x--;
})
});
Change your event listener to the following:
$("#clone_wrapper").on("click",".remove_field", function(e) {
e.preventDefault(); $(this).parent().remove(); x--;
});
Working Example.
I've made two changes:
- Change
$(wrapper)
to$("#clone_wrapper")
. The.remove_field
links are added to the wrapper clone, not the wrapper itself (fromappendTo($('#clone_wrapper'))
) - Change
$(this).parent().sibling('#content')
to$(this).parent()
. The parent is the#content
— you don't want to remove its sibling.
You need to add the new onclick function during the first one, and change your selector like this:
$(document).ready(function() {
var max_fields = 4; //maximum input boxes allowed
var wrapper = $("#addDriverContent div:first");
var add_button = $(".add_field_button"); //Add button ID
var x = 0
$(add_button).click(function(e) {
e.preventDefault();
if(x < max_fields){ //max input box allowed
x++;
$(wrapper).clone().append('<a href="#" class="remove_field">Remove</a>').appendTo($('#clone_wrapper'));
$(".remove_field").click( function(e){ //user click on remove text
e.preventDefault();
$(this).parent().remove();
x--;
})
}
});
});
I refactored your code, which is more clean and effective. explanations is in ment.
HTML
<div id="addDriverContent" style="display:none;">
<!-- if your element is going to cloned, use class instead of id. id should always be unique. -->
<div class="content">
<!-- because your content is already invisible, why note put your remove btn in it? -->
<a href="#" class="remove_field">Remove</a>
</div>
</div>
<button type="button" class="add_field_button" id="clone_button">ADD DRIVER</button>
<div id="clone_wrapper"></div>
JS
$(function($) {
var max_fields = 4;
// origin selector would select all the first div ancestors.
var $content = $("#addDriverContent > .content");
var $clone_wrapper = $("#clone_wrapper") ;
var $add_button = $(".add_field_button"); //Add button ID
$add_button.click(function(e) {
e.preventDefault();
// jquery object is array liked object. Length mean how many elements is selected.
if ( $clone_wrapper.children(".content").length < max_fields )
$content.clone().appendTo($clone_wrapper);
});
$clone_wrapper.on("click",".remove_field", function(e){
e.preventDefault();
// this would be more specific.
$(this).parent(".content").remove();
})
});
https://jsfiddle/xm4sesa2/10/
本文标签: javascriptClick to remove parent divStack Overflow
版权声明:本文标题:javascript - Click to remove parent div - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741305303a2371332.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论