如果用户需要添加更多信息,我将使用append方法向表单添加一些输入字段和一个按钮。每个按钮都有不同的名称和id,但具有相同的类。
追加过程运行良好,但是当我想使用new按钮删除特定字段时,它就不起作用了。单击操作适用于默认存在的第一个按钮,但现在适用于在运行时添加的按钮。
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。
有没有人能告诉我,我哪里错了。
上面的代码不是确切的代码,而是我的想法,我是如何使用它的。
谢谢。
发布于 2012-05-16 21:55:46
只能对已添加到DOM中的元素使用.click()事件处理程序。
对于动态添加的元素,您应该使用.on()
$(document).on("click", ".rrd", function(event){
// do stuff
});或者,当使用jQuery <1.7时,您应该使用.delegate()
$(document).delegate(".rrd", "click", function(event){
// do stuff
});请注意,不推荐使用.live(),也不推荐使用slower。
从jQuery文档中:
从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。旧版本jQuery的用户应该优先使用.delegate()而不是.live()。
发布于 2012-05-16 21:57:26
您使用类.rrd绑定了所有元素上的事件,但这不适用于动态创建的元素(在加载页面之后)。
相反,首先以head元素为目标,然后才是您要删除的实际元素。
请查看此视频,详情请参阅details -> http://tutsplus.com/lesson/bind-live-delegate-huh/
发布于 2012-05-16 21:59:59
这不是你的问题的直接解决方案,但总体上对你来说可能是更好的解决方案。你有没有考虑过使用现有的插件,而不是自己开发所有的东西?
看看SheepIt,可能还有其他的,但我只用了这个。
https://stackoverflow.com/questions/10619972
复制相似问题