我遇到问题可能是缺乏使用全局变量的经验而导致一些问题。
请检查此http://jsfiddle.net/ZgXKx/当您点击点击我!时,我会使用全局变量动态设置某些元素的ID。
我遇到了这段代码的问题:
$("#service-sets").on('click', "#facebook-del-"+a, function() {
var aa = $("#facebook-del-"+a).parent().parent().parent().attr("id");
$('#'+aa).remove();
因为"#facebook-del-"+a
中的.on('click')
无法正常工作而没有进入点击事件,而点击事件中的"#facebook-del-1"
工作正常(显示值$("#service-sets").on('click', "#facebook-del-1", function() {
var aa = $("#facebook-del-"+a).parent().parent().parent().attr("id");
$('#'+aa).remove();
)。
当我改变这样的代码时,它没有问题
{{1}}
您可以在此处查看http://jsfiddle.net/ZgXKx/1/
那么我做错了什么?
谢谢!
答案 0 :(得分:2)
$("#service-sets").on('click', "[id^=facebook-del]", function() {
$(this).closest('div.tag').remove();
});
<强> DEMO 强>
下面,
[id^=facebook-del]
是那些元素(交叉),id
以facebook-el
开头。因此,像这样设置委托事件不需要使用全局变量a
进行任何索引。
$(this).closest('div.tag')
定位到div.tag
,这是点击交叉的容器。
答案 1 :(得分:1)
问题源于这样一个事实:与“看起来”相反,“a”变量不全局。它位于由jsfiddle为您创建的函数内部。
在左侧设置控件以使代码放在<head>
而不是“onload”处理程序中,它将起作用。
此外,没有理由使用该代码执行操作以删除添加的标记。也就是说,找到元素,获得其“id”值,然后通过“id”重新找到它的过程是没有意义的。一旦你找到了带有那些“.parent()”调用的元素(这本身就是一种非常脆弱的做事方式;给外层包装器一个类然后使用.closest(".whatever")
会好得多) ,你已经得到了,而且没有理由再找到它。
编辑 - 现在我想到了它,虽然我所说的“a”是真的 - 它不是真正的全球 - 在这种情况下应该无关紧要。然而,这是jsfiddle的一个常见的刺激因素(当然,祝福他们的心)。
答案 2 :(得分:0)
在回调内部点击a
之前,您不会增加#facebook-button
。当它运行时:
$("#service-sets").on('click', "#facebook-del-"+a, function() {
..
});
a
仍为0,您只需处理#facebook-del-0
点击事件,这些事件永远不存在。
您可以使用类来删除。给你的关闭按钮“facebook-del”,然后使用它来关闭它:
$("#service-sets").on('click', '.facebook-del', function() {
$(this).parent().parent().parent().remove();
});