我努力寻找看似非常基本的东西,虽然我没有看到我做错了什么。
我想要点击某个div克隆到最多4次。 (到目前为止一直很好),我想要一个删除按钮,删除插入的一个div。
我的问题就在那里。 我无法使用移除按钮。
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>
查看my fiddle 。
(我已经开始使用this example)
答案 0 :(得分:4)
您的javascript有两个问题
click event handler
附加到错误的元素。您附加的元素在页面上甚至不可见,并且永远不会被点击。$(this).parent().remove()
就够了。$(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--;
})
});
答案 1 :(得分:4)
将您的事件监听器更改为以下内容:
$("#clone_wrapper").on("click",".remove_field", function(e) {
e.preventDefault(); $(this).parent().remove(); x--;
});
我做了两处修改:
$(wrapper)
更改为$("#clone_wrapper")
。 .remove_field
链接被添加到包装器克隆,而不是包装器本身(来自appendTo($('#clone_wrapper'))
)$(this).parent().sibling('#content')
更改为$(this).parent()
。父是 #content
- 你不想删除它的兄弟。答案 2 :(得分:3)
您需要在第一个函数中添加新的onclick函数,并更改您的选择器,如下所示:
$(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--;
})
}
});
});
答案 3 :(得分:1)
我重构了你的代码,它更干净,更有效。解释正在评论中。
<强> 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();
})
});