简单地说,当点击一个按钮时,我正在使用jQuery加载div
。但是这个div
是另一个按钮。加载的按钮,我似乎无法用jQuery操纵/选择它。这是一个最好地展示我正在尝试的例子:
http://codepen.io/projodesign/pen/zlvaB
这是jQuery: -
$(document).ready(function(){
$('.button').click(function(){
$(this).after('<div class="added-element">IM THE ADDED DIV</div><div class="remove-added-element">REMOVE DIV</div>')
});
$('.remove-added-element').click(function(){
$('.added-element').hide();
});
});
我的jQuery知识非常基础,所以任何以更好的方式解决这个问题的指针都会很棒。显然我可以将它放在HTML中,但我希望有更多可用的div添加。希望这一切都有意义。
答案 0 :(得分:1)
执行顺序问题。您将事件处理程序添加到.remove-added-element
之前。
如果您将该处理程序移到.button
点击处理程序中,那么您的问题就会消失。
$('.button').click(function(){
$(this).after('<div class="added-element">IM THE ADDED DIV</div><div class="remove-added-element">REMOVE DIV</div>');
$('.remove-added-element').click(function(){
$('.added-element').hide();
});
});
修改
nzifnab的解决方案更好。你可以改变我上面给出的代码来规避他提出的问题,但是为什么你会这么简单的话呢?
DOUBLE EDIT
由于您在下面说您想要遵循此解决方案,您需要按照某些步骤来避免nzifnab引发的问题。我认为改变和调整他的建议会做你想做的事情:
$('.button').click(function(){
$(this).after('<div class="added-element">IM THE ADDED DIV</div><div class="remove-added-element">REMOVE DIV</div>');
$(this).find('.remove-added-element').click(function(){
$(this).closest('.added-element').hide();
});
});
答案 1 :(得分:1)
jsfiddle:http://jsfiddle.net/zW7zA/
您需要使用事件委派。试试on
方法:
$(document).ready(function(){
$('.button').on('click', function(){
$(this).after('<div class="added-element">IM THE ADDED DIV<div class="remove-added-element">REMOVE DIV</div></div>')
});
$(document).on('click', '.remove-added-element', function(){
$(this).closest('.added-element').hide();
});
});
这是有效的原因而你的原因并不是因为当你直接绑定到.remove-added-element
时,当脚本运行时 ,所以没有事件受到约束。使用这种新的委托形式,它将事件绑定到确实存在的document
,然后在点击事物时检查它们是否与给定的选择器匹配。
我不得不修改一些对你当前剧本不起作用的事情。
您的&#39;删除&#39;代码只是$('.added-element').hide()
即将删除所有新元素,即使您多次点击该链接也是如此。此新代码仅隐藏单击删除按钮的一个部分(closest
查看与选择器匹配的最近父级。)
我不是在原始事件处理程序中绑定事件的忠实粉丝,因为如果您多次单击该按钮,您将绑定许多事件 - 并且使用给定代码中的一些事件将&#34;加倍&#34; (如果你点击按钮10次,9个事件到第二个,8个事件到第三个等等,你将最终将10个事件绑定到第一个新元素,除非你修改它。
这种方式更容易,它只会绑定一个事件。