0

我遇到了一个问题,可能是使用全局变量的经验不足,这会导致一些问题。

请检查这个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();

它没有进入 click 事件,因为"#facebook-del-"+ain.on('click')不工作,而 click 事件中的一个正在工作(显示 value "#facebook-del-1")。

当我像这样更改代码时,它没有问题

$("#service-sets").on('click', "#facebook-del-1", function() {           
    var aa = $("#facebook-del-"+a).parent().parent().parent().attr("id");
    $('#'+aa).remove();

你可以在这里查看http://jsfiddle.net/ZgXKx/1/

那么我犯了什么错误?

谢谢!

4

3 回答 3

2
$("#service-sets").on('click', "[id^=facebook-del]", function() {          
    $(this).closest('div.tag').remove();
});

演示

这里,

[id^=facebook-del]是那些以 .id开头的元素(交叉) facebook-el。因此,像这样设置委托事件不需要使用全局变量进行任何索引a

$(this).closest('div.tag')target to div.tag,这是点击的十字架的容器。

于 2012-06-02T17:28:45.653 回答
1

问题源于这样一个事实,与它看起来相反,“a”变量不是全局的。它位于 jsfiddle 本身为您创建的函数中。

将左侧的控件设置为将您的代码放在“onload”处理程序中<head>而不是放在“onload”处理程序中,它会起作用。

此外,没有理由使用该代码执行您正在执行的操作来删除添加的标记。也就是说,找到一个元素,获取它的“id”值,然后通过“id”重新找到它的过程是没有意义的。一旦你找到了带有“.parent()”调用的元素(这本身就是一种非常脆弱的做事方式;给外部包装器一个类然后使用会更好.closest(".whatever")),你就有了它,并且没有理由再次找到它。

编辑——现在我想起来了,尽管我所说的“a”是真的——它并不是真正的全球性——在这种情况下应该没关系。然而,它是 jsfiddle 激怒的常见原因(当然,祝福他们的心)。

于 2012-06-02T17:27:39.863 回答
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();
});

JSFiddle

于 2012-06-02T17:34:09.883 回答