2012-05-16 65 views
0

如果用户需要添加更多信息,我使用append方法来添加一些输入字段和一个按钮形式。每个按钮都有不同的名称和ID,但是具有相同的类别。使用jquery删除一些html代码

追加过程工作正常,但是当我想使用新按钮删除特定字段时,它不起作用。点击操作适用于第一个按钮,默认情况下该按钮存在,但现在用于在运行时添加的按钮。

rc; //is the counter which increments by one, each time. 
    jQuery('#mytable').append("<div id='rev-" + rc + "' class='reviewer'>" + 
          "<input type='text' name='reviewer_email[]' id='reviewer_email" + rc + "' value='' />" + 
    "<input type='button' name='rd" + rc + "' id='rd" + rc + "' class='rrd' value='Remove' /></div>"); 

    jQuery(".rrd").click(function(){ 
    alert("Test"); 
    }); 

...我已经寻找解决方案,首先我用了所有的按钮相同的ID,但现在我使用的是同一类的每个按钮,而不是ID。

任何人都可以提出一个想法,我哪里出错了。

上面的代码不是确切的代码,但想法,我如何使用它。

谢谢。

回答

2

对于已添加到DOM的元素,只能使用.click()事件处理程序。使用jQuery < 1.7时

$(document).on("click", ".rrd", function(event){ 
    // do stuff 
}); 

或者你应该使用.delegate()

对于动态添加的元素,你应该使用.on()

$(document).delegate(".rrd", "click", function(event){ 
    // do stuff 
}); 

注意.live()已被弃用,也slower

从jQuery文档:

在jQuery 1.7的,所述.live()方法被弃用。使用.on()附加事件处理程序。老版本的jQuery用户应优先使用.delegate(),而不要使用.live()。

+0

谢谢,它帮助我。 – MTahir

0

您将事件绑定到所有带有.rrd类的元素上,但是这不会计算动态创建的元素(加载页面后)。

改为先定位头元素,然后定位要删除的实际元素。

看看这个视频,它详细说明 - >http://tutsplus.com/lesson/bind-live-delegate-huh/

+0

谢谢,本教程真的有用 – MTahir

+0

欢迎您。仍然由于某种原因downvoted ... – Christophe

+0

@ krike不要担心它...我认为“有人”只是扔出他们的婴儿车摇铃:) – FluffyKitten

0

这不是一个直接的解决你的问题,但它可能是你在一般更好的解决方案。 你有没有考虑过使用现有的插件,而不是自己开发一切?

看看SheepIt也可能有其他人,但我只用过这一个。